using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; namespace UnityEngine.Networking { // Token: 0x0200006C RID: 108 [EditorBrowsable(EditorBrowsableState.Never)] public abstract class SyncList : IList, ICollection, IEnumerable, IEnumerable { // Token: 0x170000DD RID: 221 // (get) Token: 0x06000547 RID: 1351 RVA: 0x0001DE34 File Offset: 0x0001C034 public int Count { get { return this.m_Objects.Count; } } // Token: 0x170000DE RID: 222 // (get) Token: 0x06000548 RID: 1352 RVA: 0x0001DE54 File Offset: 0x0001C054 public bool IsReadOnly { get { return false; } } // Token: 0x170000DF RID: 223 // (get) Token: 0x06000549 RID: 1353 RVA: 0x0001DE6C File Offset: 0x0001C06C // (set) Token: 0x0600054A RID: 1354 RVA: 0x0001DE87 File Offset: 0x0001C087 public SyncList.SyncListChanged Callback { get { return this.m_Callback; } set { this.m_Callback = value; } } // Token: 0x0600054B RID: 1355 protected abstract void SerializeItem(NetworkWriter writer, T item); // Token: 0x0600054C RID: 1356 protected abstract T DeserializeItem(NetworkReader reader); // Token: 0x0600054D RID: 1357 RVA: 0x0001DE91 File Offset: 0x0001C091 public void InitializeBehaviour(NetworkBehaviour beh, int cmdHash) { this.m_Behaviour = beh; this.m_CmdHash = cmdHash; } // Token: 0x0600054E RID: 1358 RVA: 0x0001DEA4 File Offset: 0x0001C0A4 private void SendMsg(SyncList.Operation op, int itemIndex, T item) { if (this.m_Behaviour == null) { if (LogFilter.logError) { Debug.LogError("SyncList not initialized"); } } else { NetworkIdentity component = this.m_Behaviour.GetComponent(); if (component == null) { if (LogFilter.logError) { Debug.LogError("SyncList no NetworkIdentity"); } } else if (component.isServer) { NetworkWriter networkWriter = new NetworkWriter(); networkWriter.StartMessage(9); networkWriter.Write(component.netId); networkWriter.WritePackedUInt32((uint)this.m_CmdHash); networkWriter.Write((byte)op); networkWriter.WritePackedUInt32((uint)itemIndex); this.SerializeItem(networkWriter, item); networkWriter.FinishMessage(); NetworkServer.SendWriterToReady(component.gameObject, networkWriter, this.m_Behaviour.GetNetworkChannel()); if (this.m_Behaviour.isServer && this.m_Behaviour.isClient && this.m_Callback != null) { this.m_Callback(op, itemIndex); } } } } // Token: 0x0600054F RID: 1359 RVA: 0x0001DFB8 File Offset: 0x0001C1B8 private void SendMsg(SyncList.Operation op, int itemIndex) { this.SendMsg(op, itemIndex, default(T)); } // Token: 0x06000550 RID: 1360 RVA: 0x0001DFD8 File Offset: 0x0001C1D8 public void HandleMsg(NetworkReader reader) { byte b = reader.ReadByte(); int num = (int)reader.ReadPackedUInt32(); T t = this.DeserializeItem(reader); switch (b) { case 0: this.m_Objects.Add(t); break; case 1: this.m_Objects.Clear(); break; case 2: this.m_Objects.Insert(num, t); break; case 3: this.m_Objects.Remove(t); break; case 4: this.m_Objects.RemoveAt(num); break; case 5: case 6: this.m_Objects[num] = t; break; } if (this.m_Callback != null) { this.m_Callback((SyncList.Operation)b, num); } } // Token: 0x06000551 RID: 1361 RVA: 0x0001E0A7 File Offset: 0x0001C2A7 internal void AddInternal(T item) { this.m_Objects.Add(item); } // Token: 0x06000552 RID: 1362 RVA: 0x0001E0B6 File Offset: 0x0001C2B6 public void Add(T item) { this.m_Objects.Add(item); this.SendMsg(SyncList.Operation.OP_ADD, this.m_Objects.Count - 1, item); } // Token: 0x06000553 RID: 1363 RVA: 0x0001E0DA File Offset: 0x0001C2DA public void Clear() { this.m_Objects.Clear(); this.SendMsg(SyncList.Operation.OP_CLEAR, 0); } // Token: 0x06000554 RID: 1364 RVA: 0x0001E0F0 File Offset: 0x0001C2F0 public bool Contains(T item) { return this.m_Objects.Contains(item); } // Token: 0x06000555 RID: 1365 RVA: 0x0001E111 File Offset: 0x0001C311 public void CopyTo(T[] array, int index) { this.m_Objects.CopyTo(array, index); } // Token: 0x06000556 RID: 1366 RVA: 0x0001E124 File Offset: 0x0001C324 public int IndexOf(T item) { return this.m_Objects.IndexOf(item); } // Token: 0x06000557 RID: 1367 RVA: 0x0001E145 File Offset: 0x0001C345 public void Insert(int index, T item) { this.m_Objects.Insert(index, item); this.SendMsg(SyncList.Operation.OP_INSERT, index, item); } // Token: 0x06000558 RID: 1368 RVA: 0x0001E160 File Offset: 0x0001C360 public bool Remove(T item) { bool flag = this.m_Objects.Remove(item); if (flag) { this.SendMsg(SyncList.Operation.OP_REMOVE, 0, item); } return flag; } // Token: 0x06000559 RID: 1369 RVA: 0x0001E194 File Offset: 0x0001C394 public void RemoveAt(int index) { this.m_Objects.RemoveAt(index); this.SendMsg(SyncList.Operation.OP_REMOVEAT, index); } // Token: 0x0600055A RID: 1370 RVA: 0x0001E1AB File Offset: 0x0001C3AB public void Dirty(int index) { this.SendMsg(SyncList.Operation.OP_DIRTY, index, this.m_Objects[index]); } // Token: 0x170000E0 RID: 224 public T this[int i] { get { return this.m_Objects[i]; } set { bool flag; if (this.m_Objects[i] == null) { if (value == null) { return; } flag = true; } else { T t = this.m_Objects[i]; flag = !t.Equals(value); } this.m_Objects[i] = value; if (flag) { this.SendMsg(SyncList.Operation.OP_SET, i, value); } } } // Token: 0x0600055D RID: 1373 RVA: 0x0001E26C File Offset: 0x0001C46C public IEnumerator GetEnumerator() { return this.m_Objects.GetEnumerator(); } // Token: 0x0600055E RID: 1374 RVA: 0x0001E294 File Offset: 0x0001C494 IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator(); } // Token: 0x04000234 RID: 564 private List m_Objects = new List(); // Token: 0x04000235 RID: 565 private NetworkBehaviour m_Behaviour; // Token: 0x04000236 RID: 566 private int m_CmdHash; // Token: 0x04000237 RID: 567 private SyncList.SyncListChanged m_Callback; // Token: 0x0200006D RID: 109 // (Invoke) Token: 0x06000560 RID: 1376 public delegate void SyncListChanged(SyncList.Operation op, int itemIndex); // Token: 0x0200006E RID: 110 public enum Operation { // Token: 0x04000239 RID: 569 OP_ADD, // Token: 0x0400023A RID: 570 OP_CLEAR, // Token: 0x0400023B RID: 571 OP_INSERT, // Token: 0x0400023C RID: 572 OP_REMOVE, // Token: 0x0400023D RID: 573 OP_REMOVEAT, // Token: 0x0400023E RID: 574 OP_SET, // Token: 0x0400023F RID: 575 OP_DIRTY } } }