Beispiel #1
0
        public void ProcessUpdate(NetworkStringListUpdate update)
        {
            if (update == null)
            {
                throw new ArgumentNullException(nameof(update));
            }

            if (!_idToListMap.TryGetValue(update.ListId, out var list))
            {
                throw new ArgumentOutOfRangeException(nameof(update), "Update has invalid list id");
            }

            ProcessStringData(update.Strings, list);

            foreach (var data in update.Updates)
            {
                list.SetBinaryData((int)data.Index, ParseBinaryData(data.BinaryData));
            }
        }
Beispiel #2
0
        /// <summary>
        /// Create list updates and update listeners
        /// </summary>
        public List <NetworkStringListUpdate> CreateUpdates()
        {
            var updates = new List <NetworkStringListUpdate>();

            var binaryDataBuffer = new MemoryStream();

            for (var i = 0; i < Count; ++i)
            {
                var listData = _listData[i];

                if (listData.HasChanges)
                {
                    var list = this[i];

                    var update = new NetworkStringListUpdate
                    {
                        ListId = (uint)i
                    };

                    foreach (var added in listData.addedStrings)
                    {
                        update.Strings.Add(CreateStringDataFor(binaryDataBuffer, list, added));
                    }

                    foreach (var changed in listData.changedStrings)
                    {
                        update.Updates.Add(new ListStringDataUpdate
                        {
                            Index      = (uint)changed,
                            BinaryData = CreateBinaryDataFor(binaryDataBuffer, list, changed)
                        });
                    }

                    listData.Clear();

                    updates.Add(update);
                }
            }

            return(updates);
        }