/// <summary>
        /// Refresh the properties table from the given message.
        /// </summary>
        /// <param name="message">The received message</param>
        internal void ReadFromMessage(IncomingMessage message)
        {
            var changedKeysCount = message.ReadByte();

            for (int i = 0; i < changedKeysCount; i++)
            {
                var key      = message.ReadByte();
                var newValue = new NetBuffer();
                newValue.Write(message.ReadBytes());

                var isNewProperty = !this.internalDictionary.ContainsKey(key);
                this.internalDictionary[key] = newValue;

                if (isNewProperty)
                {
                    this.PropertyAdded?.Invoke(this, key);
                }
                else
                {
                    this.PropertyChanged?.Invoke(this, key);
                }
            }

            var removedKeysCount = message.ReadByte();

            for (int i = 0; i < removedKeysCount; i++)
            {
                var key = message.ReadByte();

                NetBuffer value;
                this.internalDictionary.TryRemove(key, out value);

                this.PropertyRemoved?.Invoke(this, key);
            }
        }
예제 #2
0
        /// <summary>
        /// Reads the entity.
        /// </summary>
        /// <param name="message">The message.</param>
        /// <returns>Return the serialized entity from message</returns>
        private Entity ReadEntity(IncomingMessage message)
        {
            var data = message.ReadBytes();

            using (var stream = new MemoryStream())
            {
                stream.Write(data, 0, data.Length);
                stream.Seek(0, SeekOrigin.Begin);

                var entity = this.serializer.Deserialize(stream);
                return((Entity)entity);
            }
        }