Files
2026-06-04 11:42:34 +02:00

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
}
}
}