Skip to content

Commit 593a960

Browse files
refactor project and Utilities package to use OnConnectionEvent callback
1 parent a7dab56 commit 593a960

File tree

6 files changed

+77
-48
lines changed

6 files changed

+77
-48
lines changed

Assets/Scripts/ConnectionManagement/ConnectionManager.cs

+12-11
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,7 @@ void Start()
9393

9494
m_CurrentState = m_Offline;
9595

96-
NetworkManager.OnClientConnectedCallback += OnClientConnectedCallback;
97-
NetworkManager.OnClientDisconnectCallback += OnClientDisconnectCallback;
96+
NetworkManager.OnConnectionEvent += OnConnectionEvent;
9897
NetworkManager.OnServerStarted += OnServerStarted;
9998
NetworkManager.ConnectionApprovalCallback += ApprovalCheck;
10099
NetworkManager.OnTransportFailure += OnTransportFailure;
@@ -103,8 +102,7 @@ void Start()
103102

104103
void OnDestroy()
105104
{
106-
NetworkManager.OnClientConnectedCallback -= OnClientConnectedCallback;
107-
NetworkManager.OnClientDisconnectCallback -= OnClientDisconnectCallback;
105+
NetworkManager.OnConnectionEvent -= OnConnectionEvent;
108106
NetworkManager.OnServerStarted -= OnServerStarted;
109107
NetworkManager.ConnectionApprovalCallback -= ApprovalCheck;
110108
NetworkManager.OnTransportFailure -= OnTransportFailure;
@@ -123,14 +121,17 @@ internal void ChangeState(ConnectionState nextState)
123121
m_CurrentState.Enter();
124122
}
125123

126-
void OnClientDisconnectCallback(ulong clientId)
124+
void OnConnectionEvent(NetworkManager networkManager, ConnectionEventData connectionEventData)
127125
{
128-
m_CurrentState.OnClientDisconnect(clientId);
129-
}
130-
131-
void OnClientConnectedCallback(ulong clientId)
132-
{
133-
m_CurrentState.OnClientConnected(clientId);
126+
switch (connectionEventData.EventType)
127+
{
128+
case ConnectionEvent.ClientConnected:
129+
m_CurrentState.OnClientConnected(connectionEventData.ClientId);
130+
break;
131+
case ConnectionEvent.ClientDisconnected:
132+
m_CurrentState.OnClientDisconnect(connectionEventData.ClientId);
133+
break;
134+
}
134135
}
135136

136137
void OnServerStarted()

Assets/Scripts/Gameplay/GameState/ServerBossRoomState.cs

+9-6
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ void OnNetworkSpawn()
7979
m_PersistentGameState.Reset();
8080
m_LifeStateChangedEventMessageSubscriber.Subscribe(OnLifeStateChangedEventMessage);
8181

82-
NetworkManager.Singleton.OnClientDisconnectCallback += OnClientDisconnect;
82+
NetworkManager.Singleton.OnConnectionEvent += OnConnectionEvent;
8383
NetworkManager.Singleton.SceneManager.OnLoadEventCompleted += OnLoadEventCompleted;
8484
NetworkManager.Singleton.SceneManager.OnSynchronizeComplete += OnSynchronizeComplete;
8585

@@ -93,7 +93,7 @@ void OnNetworkDespawn()
9393
m_LifeStateChangedEventMessageSubscriber.Unsubscribe(OnLifeStateChangedEventMessage);
9494
}
9595

96-
NetworkManager.Singleton.OnClientDisconnectCallback -= OnClientDisconnect;
96+
NetworkManager.Singleton.OnConnectionEvent -= OnConnectionEvent;
9797
NetworkManager.Singleton.SceneManager.OnLoadEventCompleted -= OnLoadEventCompleted;
9898
NetworkManager.Singleton.SceneManager.OnSynchronizeComplete -= OnSynchronizeComplete;
9999
}
@@ -138,12 +138,15 @@ void OnLoadEventCompleted(string sceneName, LoadSceneMode loadSceneMode, List<ul
138138
}
139139
}
140140

141-
void OnClientDisconnect(ulong clientId)
141+
void OnConnectionEvent(NetworkManager networkManager, ConnectionEventData connectionEventData)
142142
{
143-
if (clientId != NetworkManager.Singleton.LocalClientId)
143+
if (connectionEventData.EventType == ConnectionEvent.ClientDisconnected)
144144
{
145-
// If a client disconnects, check for game over in case all other players are already down
146-
StartCoroutine(WaitToCheckForGameOver());
145+
if (connectionEventData.ClientId != networkManager.LocalClientId)
146+
{
147+
// If a client disconnects, check for game over in case all other players are already down
148+
StartCoroutine(WaitToCheckForGameOver());
149+
}
147150
}
148151
}
149152

Assets/Scripts/Gameplay/GameState/ServerCharSelectState.cs

+18-15
Original file line numberDiff line numberDiff line change
@@ -184,11 +184,11 @@ IEnumerator WaitToEndSession()
184184
SceneLoaderWrapper.Instance.LoadScene("BossRoom", useNetworkSceneManager: true);
185185
}
186186

187-
public void OnNetworkDespawn()
187+
void OnNetworkDespawn()
188188
{
189189
if (NetworkManager.Singleton)
190190
{
191-
NetworkManager.Singleton.OnClientDisconnectCallback -= OnClientDisconnectCallback;
191+
NetworkManager.Singleton.OnConnectionEvent -= OnConnectionEvent;
192192
NetworkManager.Singleton.SceneManager.OnSceneEvent -= OnSceneEvent;
193193
}
194194
if (networkCharSelection)
@@ -197,15 +197,15 @@ public void OnNetworkDespawn()
197197
}
198198
}
199199

200-
public void OnNetworkSpawn()
200+
void OnNetworkSpawn()
201201
{
202202
if (!NetworkManager.Singleton.IsServer)
203203
{
204204
enabled = false;
205205
}
206206
else
207207
{
208-
NetworkManager.Singleton.OnClientDisconnectCallback += OnClientDisconnectCallback;
208+
NetworkManager.Singleton.OnConnectionEvent += OnConnectionEvent;
209209
networkCharSelection.OnClientChangedSeat += OnClientChangedSeat;
210210

211211
NetworkManager.Singleton.SceneManager.OnSceneEvent += OnSceneEvent;
@@ -276,22 +276,25 @@ void SeatNewPlayer(ulong clientId)
276276
}
277277
}
278278

279-
void OnClientDisconnectCallback(ulong clientId)
279+
void OnConnectionEvent(NetworkManager networkManager, ConnectionEventData connectionEventData)
280280
{
281-
// clear this client's PlayerNumber and any associated visuals (so other players know they're gone).
282-
for (int i = 0; i < networkCharSelection.sessionPlayers.Count; ++i)
281+
if (connectionEventData.EventType == ConnectionEvent.ClientDisconnected)
283282
{
284-
if (networkCharSelection.sessionPlayers[i].ClientId == clientId)
283+
// clear this client's PlayerNumber and any associated visuals (so other players know they're gone).
284+
for (int i = 0; i < networkCharSelection.sessionPlayers.Count; ++i)
285285
{
286-
networkCharSelection.sessionPlayers.RemoveAt(i);
287-
break;
286+
if (networkCharSelection.sessionPlayers[i].ClientId == connectionEventData.ClientId)
287+
{
288+
networkCharSelection.sessionPlayers.RemoveAt(i);
289+
break;
290+
}
288291
}
289-
}
290292

291-
if (!networkCharSelection.IsSessionClosed.Value)
292-
{
293-
// If the Session is not already closing, close if the remaining players are all ready
294-
CloseSessionIfReady();
293+
if (!networkCharSelection.IsSessionClosed.Value)
294+
{
295+
// If the Session is not already closing, close if the remaining players are all ready
296+
CloseSessionIfReady();
297+
}
295298
}
296299
}
297300
}

Assets/Scripts/Infrastructure/PubSub/NetworkedMessageChannel.cs

+7-3
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public NetworkedMessageChannel()
2626
void InjectDependencies(NetworkManager networkManager)
2727
{
2828
m_NetworkManager = networkManager;
29-
m_NetworkManager.OnClientConnectedCallback += OnClientConnected;
29+
m_NetworkManager.OnConnectionEvent += OnConnectionEvent;
3030
if (m_NetworkManager.IsListening)
3131
{
3232
RegisterHandler();
@@ -40,14 +40,18 @@ public override void Dispose()
4040
if (m_NetworkManager != null && m_NetworkManager.CustomMessagingManager != null)
4141
{
4242
m_NetworkManager.CustomMessagingManager.UnregisterNamedMessageHandler(m_Name);
43+
m_NetworkManager.OnConnectionEvent -= OnConnectionEvent;
4344
}
4445
}
4546
base.Dispose();
4647
}
4748

48-
void OnClientConnected(ulong clientId)
49+
void OnConnectionEvent(NetworkManager networkManager, ConnectionEventData connectionEventData)
4950
{
50-
RegisterHandler();
51+
if (connectionEventData.EventType == ConnectionEvent.ClientConnected)
52+
{
53+
RegisterHandler();
54+
}
5155
}
5256

5357
void RegisterHandler()

Packages/com.unity.multiplayer.samples.coop/Utilities/SceneManagement/LoadingProgressManager.cs

+22-7
Original file line numberDiff line numberDiff line change
@@ -69,17 +69,14 @@ public override void OnNetworkSpawn()
6969
{
7070
if (IsServer)
7171
{
72-
NetworkManager.OnClientConnectedCallback += AddTracker;
73-
NetworkManager.OnClientDisconnectCallback += RemoveTracker;
74-
AddTracker(NetworkManager.LocalClientId);
72+
NetworkManager.OnConnectionEvent += OnConnectionEvent;
7573
}
7674
}
7775
public override void OnNetworkDespawn()
7876
{
7977
if (IsServer)
8078
{
81-
NetworkManager.OnClientConnectedCallback -= AddTracker;
82-
NetworkManager.OnClientDisconnectCallback -= RemoveTracker;
79+
NetworkManager.OnConnectionEvent -= OnConnectionEvent;
8380
}
8481
ProgressTrackers.Clear();
8582
onTrackersUpdated?.Invoke();
@@ -122,6 +119,26 @@ void ClientUpdateTrackersRpc()
122119
}
123120
onTrackersUpdated?.Invoke();
124121
}
122+
123+
void OnConnectionEvent(NetworkManager networkManager, ConnectionEventData connectionEventData)
124+
{
125+
if (IsServer)
126+
{
127+
switch (connectionEventData.EventType)
128+
{
129+
case ConnectionEvent.ClientConnected:
130+
{
131+
AddTracker(connectionEventData.ClientId);
132+
break;
133+
}
134+
case ConnectionEvent.ClientDisconnected:
135+
{
136+
RemoveTracker(connectionEventData.ClientId);
137+
break;
138+
}
139+
}
140+
}
141+
}
125142

126143
void AddTracker(ulong clientId)
127144
{
@@ -141,9 +158,7 @@ void RemoveTracker(ulong clientId)
141158
{
142159
if (ProgressTrackers.ContainsKey(clientId))
143160
{
144-
var tracker = ProgressTrackers[clientId];
145161
ProgressTrackers.Remove(clientId);
146-
tracker.NetworkObject.Despawn();
147162
ClientUpdateTrackersRpc();
148163
}
149164
}

Packages/com.unity.multiplayer.samples.coop/Utilities/SceneManagement/ServerAdditiveSceneLoader.cs

+9-6
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public override void OnNetworkSpawn()
5454
{
5555
// Adding this to remove all pending references to a specific client when they disconnect, since objects
5656
// that are destroyed do not generate OnTriggerExit events.
57-
NetworkManager.OnClientDisconnectCallback += RemovePlayer;
57+
NetworkManager.OnConnectionEvent += OnConnectionEvent;
5858

5959
NetworkManager.SceneManager.OnSceneEvent += OnSceneEvent;
6060
m_PlayersInTrigger = new List<ulong>();
@@ -65,7 +65,7 @@ public override void OnNetworkDespawn()
6565
{
6666
if (IsServer)
6767
{
68-
NetworkManager.OnClientDisconnectCallback -= RemovePlayer;
68+
NetworkManager.OnConnectionEvent -= OnConnectionEvent;
6969
NetworkManager.SceneManager.OnSceneEvent -= OnSceneEvent;
7070
}
7171
}
@@ -136,11 +136,14 @@ void FixedUpdate()
136136
}
137137
}
138138

139-
void RemovePlayer(ulong clientId)
139+
void OnConnectionEvent(NetworkManager networkManager, ConnectionEventData connectionEventData)
140140
{
141-
// remove all references to this clientId. There could be multiple references if a single client owns
142-
// multiple NetworkObjects with the m_PlayerTag, or if this script's GameObject has overlapping colliders
143-
while (m_PlayersInTrigger.Remove(clientId)) { }
141+
if (connectionEventData.EventType == ConnectionEvent.ClientDisconnected)
142+
{
143+
// remove all references to this clientId. There could be multiple references if a single client owns
144+
// multiple NetworkObjects with the m_PlayerTag, or if this script's GameObject has overlapping colliders
145+
while (m_PlayersInTrigger.Remove(connectionEventData.ClientId)) { }
146+
}
144147
}
145148

146149
IEnumerator WaitToUnloadCoroutine()

0 commit comments

Comments
 (0)