Пример #1
0
        public static UserLedgerEntry01 Deserialize(byte[] buffer)
        {
            UserLedgerEntry01 e = UserLedgerEntry01.New();

            int bufferBase = 0;

            // Entity Header fields
            e.___entityserializationsignature = buffer[bufferBase++];
            if (!e.CheckEntitySerializationSignature())
            {
                e.OnChangeState(EntitySerialization01.EntityState.EXCEPTION_DESERIALIZATION_ENTITYSIGNATURE); return(e);
            }
            e.___entityserializationversion = buffer[bufferBase++];
            if (!e.CheckEntitySerializationVersion())
            {
                e.OnChangeState(EntitySerialization01.EntityState.EXCEPTION_DESERIALIZATION_ENTITYVERSION); return(e);
            }
            e.___fieldserializationversion = buffer[bufferBase++];
            if (!e.CheckFieldSerializationVersion())
            {
                e.OnChangeState(EntitySerialization01.EntityState.EXCEPTION_DESERIALIZATION_FIELDVERSION); return(e);
            }


            if (!e.CheckEntitySerializationSignature())
            {
                e.OnChangeState(EntitySerialization01.EntityState.EXCEPTION_DESERIALIZATION_ENTITYSIGNATURE); return(e);
            }
            if (!e.CheckEntitySerializationVersion())
            {
                e.OnChangeState(EntitySerialization01.EntityState.EXCEPTION_DESERIALIZATION_ENTITYVERSION); return(e);
            }
            if (!e.CheckFieldSerializationVersion())
            {
                e.OnChangeState(EntitySerialization01.EntityState.EXCEPTION_DESERIALIZATION_FIELDVERSION); return(e);
            }

            e.___entitystate = (EntitySerialization01.EntityState)buffer[bufferBase++];
            e.___nfields     = buffer[bufferBase++];

            // Entity System fields
            e.__entitytypehash = FieldSerialization01.GetByteArray(buffer, ref bufferBase);
            e.__created        = FieldSerialization01.GetInt64(buffer, ref bufferBase);
            e.__modified       = FieldSerialization01.GetInt64(buffer, ref bufferBase);
            e.__changeindex    = FieldSerialization01.GetInt64(buffer, ref bufferBase);

            // Entity Data fields
            e._id         = FieldSerialization01.GetInt32(buffer, ref bufferBase);
            e._username   = FieldSerialization01.GetString(buffer, ref bufferBase);
            e._passphrase = FieldSerialization01.GetString(buffer, ref bufferBase);

            e.OnChangeAllFieldValues(EntitySerialization01.EntityState.DESERIALIZED);

            return(e);
        }
Пример #2
0
        public byte[] Serialize()
        {
            if (___entitystate == EntitySerialization01.EntityState.UNINITIALIZED)
            {
                Initialize();
            }

            EntitySerialization01.EntityState oldState = OnChangeState(EntitySerialization01.EntityState.SERIALIZED);

            byte[][] fieldBuffer = new byte[this.___nfields][];

            // Entity System fields
            fieldBuffer[0] = FieldSerialization01.GetFieldBuffer(this.__entitytypehash);
            fieldBuffer[1] = FieldSerialization01.GetFieldBuffer(this.__created);
            fieldBuffer[2] = FieldSerialization01.GetFieldBuffer(this.__modified);
            fieldBuffer[3] = FieldSerialization01.GetFieldBuffer(this.__changeindex);

            // Entity Data fields
            fieldBuffer[4] = FieldSerialization01.GetFieldBuffer(this._imageVersion);
            fieldBuffer[5] = FieldSerialization01.GetFieldBuffer(this._imageName);
            fieldBuffer[6] = FieldSerialization01.GetFieldBuffer(this._imageContent);

            int lBuffer = EntitySerialization01.NHEADERFIELDS * sizeof(byte);

            for (int fi = 0; fi < ___nfields; fi++)
            {
                lBuffer += fieldBuffer[fi].Length;                                     // Entity System fields plus Entity data fields
            }
            byte[] buffer     = new byte[lBuffer];
            int    bufferBase = 0;

            // Entity Header fields
            buffer[bufferBase++] = ___entityserializationsignature;
            buffer[bufferBase++] = ___entityserializationversion;
            buffer[bufferBase++] = ___fieldserializationversion;
            buffer[bufferBase++] = (byte)___entitystate;
            buffer[bufferBase++] = ___nfields;

            // Entity System fields plus Entity data fields
            for (int fi = 0; fi < ___nfields; fi++)
            {
                if (bufferBase + fieldBuffer[fi].Length > lBuffer)
                {
                    OnChangeState(EntitySerialization01.EntityState.EXCEPTION_SERIALIZATION);
                    return(Array.Empty <byte>());
                }
                fieldBuffer[fi].CopyTo(buffer, bufferBase);
                bufferBase += fieldBuffer[fi].Length;
            }

            ___entitystate = oldState;

            return(buffer);
        }