ConnectionArray.cs
3.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#if ENABLE_UNET
using System;
using System.Collections.Generic;
#pragma warning disable 618
namespace UnityEngine.Networking
{
// This has a list of real connections
// The local or "fake" connections are kept separate because sometimes you
// only want to iterate through those, and not all connections.
class ConnectionArray
{
List<NetworkConnection> m_LocalConnections;
List<NetworkConnection> m_Connections;
internal List<NetworkConnection> localConnections { get { return m_LocalConnections; }}
internal List<NetworkConnection> connections { get { return m_Connections; }}
public int Count { get { return m_Connections.Count; } }
public int LocalIndex { get { return -m_LocalConnections.Count; } }
public ConnectionArray()
{
m_Connections = new List<NetworkConnection>();
m_LocalConnections = new List<NetworkConnection>();
}
public int Add(int connId, NetworkConnection conn)
{
if (connId < 0)
{
if (LogFilter.logWarn) {Debug.LogWarning("ConnectionArray Add bad id " + connId); }
return -1;
}
if (connId < m_Connections.Count && m_Connections[connId] != null)
{
if (LogFilter.logWarn) { Debug.LogWarning("ConnectionArray Add dupe at " + connId); }
return -1;
}
while (connId > (m_Connections.Count - 1))
{
m_Connections.Add(null);
}
m_Connections[connId] = conn;
return connId;
}
// call this if you know the connnection exists
public NetworkConnection Get(int connId)
{
if (connId < 0)
{
return m_LocalConnections[Mathf.Abs(connId) - 1];
}
if (connId > m_Connections.Count)
{
if (LogFilter.logWarn) { Debug.LogWarning("ConnectionArray Get invalid index " + connId); }
return null;
}
return m_Connections[connId];
}
// call this if the connection may not exist (in disconnect handler)
public NetworkConnection GetUnsafe(int connId)
{
if (connId < 0 || connId > m_Connections.Count)
{
return null;
}
return m_Connections[connId];
}
public void Remove(int connId)
{
if (connId < 0)
{
m_LocalConnections[Mathf.Abs(connId) - 1] = null;
return;
}
if (connId > m_Connections.Count)
{
if (LogFilter.logWarn) { Debug.LogWarning("ConnectionArray Remove invalid index " + connId); }
return;
}
m_Connections[connId] = null;
}
public int AddLocal(NetworkConnection conn)
{
m_LocalConnections.Add(conn);
int index = -m_LocalConnections.Count;
conn.connectionId = index;
return index;
}
public bool ContainsPlayer(GameObject player, out NetworkConnection conn)
{
conn = null;
if (player == null)
return false;
for (int i = LocalIndex; i < m_Connections.Count; i++)
{
conn = Get(i);
if (conn != null)
{
for (int j = 0; j < conn.playerControllers.Count; j++)
{
if (conn.playerControllers[j].IsValid && conn.playerControllers[j].gameObject == player)
{
return true;
}
}
}
}
return false;
}
}
}
#pragma warning restore 618
#endif //ENABLE_UNET