Exemple #1
0
        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));
            }
        }
Exemple #2
0
        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;
        }
Exemple #3
0
 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);
            }
        }
Exemple #5
0
        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;
            }
        }