287 lines
6.8 KiB
C#
287 lines
6.8 KiB
C#
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<T> : IList<T>, ICollection<T>, IEnumerable<T>, 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<T>.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<T>.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<NetworkIdentity>();
|
|
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<T>.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<T>.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<T>.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<T>.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<T>.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<T>.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<T>.Operation.OP_REMOVEAT, index);
|
|
}
|
|
|
|
// Token: 0x0600055A RID: 1370 RVA: 0x0001E1AB File Offset: 0x0001C3AB
|
|
public void Dirty(int index)
|
|
{
|
|
this.SendMsg(SyncList<T>.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<T>.Operation.OP_SET, i, value);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600055D RID: 1373 RVA: 0x0001E26C File Offset: 0x0001C46C
|
|
public IEnumerator<T> 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<T> m_Objects = new List<T>();
|
|
|
|
// Token: 0x04000235 RID: 565
|
|
private NetworkBehaviour m_Behaviour;
|
|
|
|
// Token: 0x04000236 RID: 566
|
|
private int m_CmdHash;
|
|
|
|
// Token: 0x04000237 RID: 567
|
|
private SyncList<T>.SyncListChanged m_Callback;
|
|
|
|
// Token: 0x0200006D RID: 109
|
|
// (Invoke) Token: 0x06000560 RID: 1376
|
|
public delegate void SyncListChanged(SyncList<T>.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
|
|
}
|
|
}
|
|
}
|