private object ReadField(IDataReader reader, D2oFieldDefinition field, D2oFieldType typeId, int vectorDimension = 0) { switch (typeId) { case D2oFieldType.Int: return(ReadFieldInt(reader)); case D2oFieldType.Bool: return(ReadFieldBool(reader)); case D2oFieldType.String: return(ReadFieldUTF(reader)); case D2oFieldType.Double: return(ReadFieldDouble(reader)); case D2oFieldType.I18N: return(ReadFieldI18n(reader)); case D2oFieldType.UInt: return(ReadFieldUInt(reader)); case D2oFieldType.List: return(ReadFieldVector(reader, field, vectorDimension)); default: return(ReadFieldObject(reader)); } }
public D2oFieldDefinition(string name, D2oFieldType typeId, PropertyInfo propertyInfo, long offset, params Tuple <D2oFieldType, string>[] vectorsTypes) { Name = name; TypeId = typeId; PropertyInfo = propertyInfo; Offset = offset; VectorTypes = vectorsTypes; }
private void ReadClassesTable() { this._classcount = _reader.ReadInt(); this.Classes = new Dictionary <int, D2oClassDefinition>(this._classcount); for (int i = 0; i < this._classcount; i++) { int num = this._reader.ReadInt(); string text = this._reader.ReadUTF(); string packagename = this._reader.ReadUTF(); Type type = D2oReader.FindType(text); if (type == null) { type = D2oReader.FindType(text + "s"); if (type == null) { throw new ArgumentException(text); } } int num2 = this._reader.ReadInt(); List <D2oFieldDefinition> list = new List <D2oFieldDefinition>(num2); for (int j = 0; j < num2; j++) { string text2 = this._reader.ReadUTF().Replace("_", ""); text2 = char.ToUpper(text2[0]).ToString() + text2.Substring(1); D2oFieldType d2oFieldType = (D2oFieldType)this._reader.ReadInt(); List <Tuple <D2oFieldType, string> > list2 = new List <Tuple <D2oFieldType, string> >(); if (d2oFieldType == D2oFieldType.List) { D2oFieldType d2oFieldType2; do { string item = this._reader.ReadUTF(); d2oFieldType2 = (D2oFieldType)this._reader.ReadInt(); list2.Add(Tuple.Create <D2oFieldType, string>(d2oFieldType2, item)); }while (d2oFieldType2 == D2oFieldType.List); } FieldInfo field = type.GetField(text2); if (field == null) { field = type.GetField(char.ToLower(text2[0]).ToString() + text2.Substring(1)); if (field == null) { throw new Exception(string.Format("Missing field '{0}' ({1}) in class '{2}'", text2, d2oFieldType, type.Name)); } } list.Add(new D2oFieldDefinition(text2, d2oFieldType, field, this._reader.Position, list2.ToArray())); } this.Classes.Add(num, new D2oClassDefinition(num, text, packagename, type, list, this._reader.Position)); } }
private object ReadField(IDataReader reader, D2oFieldDefinition field, D2oFieldType typeId, int vectorDimension = 0) { try { switch (typeId) { case D2oFieldType.Int: return(ReadFieldInt(reader)); case D2oFieldType.Bool: return(ReadFieldBool(reader)); case D2oFieldType.String: return(ReadFieldUTF(reader)); case D2oFieldType.Double: return(ReadFieldDouble(reader)); case D2oFieldType.I18N: return(ReadFieldI18n(reader)); case D2oFieldType.UInt: return(ReadFieldUInt(reader)); case D2oFieldType.List: return(ReadFieldVector(reader, field, vectorDimension)); default: return(ReadFieldObject(reader)); } } catch (Exception ex) { Console.WriteLine(string.Format("[D2O] Can't read field {0} for exception {1}.", field.Name, ex.Message)); return(null); } }
private void WriteField(BigEndianWriter writer, D2oFieldDefinition field, D2oFieldType typeId, dynamic obj, int vectorDimension = 0) { switch (typeId) { case D2oFieldType.Int: WriteFieldInt(writer, (int)obj); break; case D2oFieldType.Bool: WriteFieldBool(writer, obj); break; case D2oFieldType.String: WriteFieldUTF(writer, obj); break; case D2oFieldType.Double: WriteFieldDouble(writer, obj); break; case D2oFieldType.I18N: WriteFieldI18n(writer, (int)obj); break; case D2oFieldType.UInt: WriteFieldUInt(writer, (uint)obj); break; case D2oFieldType.List: WriteFieldVector(writer, field, obj, vectorDimension); break; default: WriteFieldObject(writer, obj); break; } }