Beispiel #1
0
        public sealed override void ReadFromBuffer(NetBuffer buffer, SyncContext context)
        {
            ReferencesPending = false;
            ushort elementCount = buffer.ReadVWidth();

            if (DeltaEncoding)
            {
                if (context.Revision > Revision)
                {
                    Revision = context.Revision;
                    if (elementCount != Elements.Count)
                    {
                        SetElementLength(elementCount);
                        Synchronised = false;
                    }
                }

                int changeCount = buffer.ReadVWidth();
                // If the change count is 0, then we want to default to the read all behavior of non delta lists.
                bool skipHeader = changeCount == elementCount;

                for (int i = 0; i < changeCount; i++)
                {
                    int index = skipHeader ? i : buffer.ReadVWidth();

                    if (index < Elements.Count)
                    {
                        Synchroniser element = Elements[index];
                        element.ReadFromBuffer(buffer, context);
                        ReferencesPending |= element.ReferencesPending;
                        Synchronised      &= element.Synchronised;
                    }
                    else
                    {
                        // Elements will be out of range if an out of date revision arrives after after the list is shrunk
                        ElementFactory.SkipFromBuffer(buffer);
                    }
                }
            }
            else
            {
                Revision = context.Revision;
                if (elementCount != Elements.Count)
                {
                    SetElementLength(elementCount);
                    Synchronised = false;
                }

                foreach (Synchroniser element in Elements)
                {
                    element.ReadFromBuffer(buffer, context);
                    ReferencesPending |= element.ReferencesPending;
                    Synchronised      &= element.Synchronised;
                }
            }
        }
        public sealed override void ReadFromBuffer(NetBuffer buffer, SyncContext context)
        {
            if (context.Revision > Revision)
            {
                Revision = context.Revision;
            }

            int  updated     = buffer.ReadByte();
            bool skipHeaders = updated == Fields.Length;

            for (int i = 0; i < updated; i++)
            {
                int          index = (skipHeaders) ? i : buffer.ReadByte();
                Synchroniser field = Fields[index];
                field.ReadFromBuffer(buffer, context);
                Synchronised      &= field.Synchronised;
                ReferencesPending |= field.ReferencesPending;
            }
        }