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)); } }
/// <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); }