Skip to content

Commit 519bd5e

Browse files
Merge branch 'develop' into sam/feat/bump-NGO-to-1.1
2 parents 6f05618 + cae91fa commit 519bd5e

File tree

12 files changed

+331
-38
lines changed

12 files changed

+331
-38
lines changed

Assets/Scripts/ApplicationLifecycle/ApplicationController.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ protected override void Configure(IContainerBuilder builder)
3030
{
3131
base.Configure(builder);
3232
builder.RegisterComponent(m_UpdateRunner);
33+
builder.RegisterComponent(m_ConnectionManager.NetworkManager);
3334
builder.RegisterComponent(m_ConnectionManager);
3435

3536
//the following singletons represent the local representations of the lobby that we're in and the user that we are
@@ -48,10 +49,10 @@ protected override void Configure(IContainerBuilder builder)
4849

4950
//these message channels are essential and persist for the lifetime of the lobby and relay services
5051
//they are networked so that the clients can subscribe to those messages that are published by the server
51-
builder.RegisterInstance(new NetworkedMessageChannel<LifeStateChangedEventMessage>()).AsImplementedInterfaces();
52-
builder.RegisterInstance(new NetworkedMessageChannel<ConnectionEventMessage>()).AsImplementedInterfaces();
52+
builder.RegisterComponent(new NetworkedMessageChannel<LifeStateChangedEventMessage>()).AsImplementedInterfaces();
53+
builder.RegisterComponent(new NetworkedMessageChannel<ConnectionEventMessage>()).AsImplementedInterfaces();
5354
#if UNITY_EDITOR || DEVELOPMENT_BUILD
54-
builder.RegisterInstance(new NetworkedMessageChannel<CheatUsedMessage>()).AsImplementedInterfaces();
55+
builder.RegisterComponent(new NetworkedMessageChannel<CheatUsedMessage>()).AsImplementedInterfaces();
5556
#endif
5657

5758
//this message channel is essential and persists for the lifetime of the lobby and relay services

Assets/Scripts/ConnectionManagement/ConnectionState/ClientConnectedState.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
using System;
2+
using Unity.Multiplayer.Samples.BossRoom.Shared.Net.UnityServices.Lobbies;
3+
using UnityEngine;
4+
using VContainer;
25

36
namespace Unity.Multiplayer.Samples.BossRoom
47
{
@@ -8,7 +11,16 @@ namespace Unity.Multiplayer.Samples.BossRoom
811
/// </summary>
912
class ClientConnectedState : ConnectionState
1013
{
11-
public override void Enter() { }
14+
[Inject]
15+
protected LobbyServiceFacade m_LobbyServiceFacade;
16+
17+
public override void Enter()
18+
{
19+
if (m_LobbyServiceFacade.CurrentUnityLobby != null)
20+
{
21+
m_LobbyServiceFacade.BeginTracking();
22+
}
23+
}
1224

1325
public override void Exit() { }
1426

Assets/Scripts/ConnectionManagement/ConnectionState/HostingState.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ public override void Enter()
3434
//The "BossRoom" server always advances to CharSelect immediately on start. Different games
3535
//may do this differently.
3636
SceneLoaderWrapper.Instance.LoadScene("CharSelect", useNetworkSceneManager: true);
37+
38+
if (m_LobbyServiceFacade.CurrentUnityLobby != null)
39+
{
40+
m_LobbyServiceFacade.BeginTracking();
41+
}
3742
}
3843

3944
public override void Exit()

Assets/Scripts/Gameplay/UI/Lobby/LobbyJoiningUI.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,6 @@ public void Show()
141141
m_CanvasGroup.alpha = 1f;
142142
m_CanvasGroup.blocksRaycasts = true;
143143
m_JoinCodeField.text = "";
144-
OnRefresh();
145144
m_UpdateRunner.Subscribe(PeriodicRefresh, 10f);
146145
}
147146

Assets/Scripts/Gameplay/UI/Lobby/LobbyUIMediator.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,8 @@ public void Hide()
220220
{
221221
m_CanvasGroup.alpha = 0f;
222222
m_CanvasGroup.blocksRaycasts = false;
223+
m_LobbyCreationUI.Hide();
224+
m_LobbyJoiningUI.Hide();
223225
}
224226

225227
public void ToggleJoinLobbyUI()

Assets/Scripts/Infrastructure/PubSub/NetworkedMessageChannel.cs

Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,70 +2,66 @@
22
using Unity.Collections;
33
using Unity.Netcode;
44
using UnityEngine;
5+
using VContainer;
56

67
namespace Unity.Multiplayer.Samples.BossRoom.Shared.Infrastructure
78
{
89
/// <summary>
910
/// This type of message channel allows the server to publish a message that will be sent to clients as well as
10-
/// being published locally. Clients and the server both can subscribe to it. However, that subscription needs to be
11-
/// done after the NetworkManager has initialized. On objects whose lifetime is bigger than a networked session,
12-
/// subscribing will be required each time a new session starts.
11+
/// being published locally. Clients and the server both can subscribe to it.
1312
/// </summary>
1413
/// <typeparam name="T"></typeparam>
1514
public class NetworkedMessageChannel<T> : MessageChannel<T> where T : unmanaged, INetworkSerializeByMemcpy
1615
{
17-
string m_Name;
16+
NetworkManager m_NetworkManager;
1817

19-
bool m_HasRegisteredHandler;
18+
string m_Name;
2019

2120
public NetworkedMessageChannel()
2221
{
2322
m_Name = $"{typeof(T).FullName}NetworkMessageChannel";
2423
}
2524

26-
public override void Dispose()
25+
[Inject]
26+
void InjectDependencies(NetworkManager networkManager)
2727
{
28-
if (!IsDisposed)
28+
m_NetworkManager = networkManager;
29+
m_NetworkManager.OnClientConnectedCallback += OnClientConnected;
30+
if (m_NetworkManager.IsListening)
2931
{
30-
if (NetworkManager.Singleton != null && NetworkManager.Singleton.CustomMessagingManager != null && m_HasRegisteredHandler)
31-
{
32-
NetworkManager.Singleton.CustomMessagingManager.UnregisterNamedMessageHandler(m_Name);
33-
}
34-
35-
m_HasRegisteredHandler = false;
32+
RegisterHandler();
3633
}
37-
base.Dispose();
3834
}
3935

40-
public override IDisposable Subscribe(Action<T> handler)
36+
public override void Dispose()
4137
{
42-
if (NetworkManager.Singleton != null && NetworkManager.Singleton.IsListening)
38+
if (!IsDisposed)
4339
{
44-
// Only register message handler on clients
45-
if (!m_HasRegisteredHandler && !NetworkManager.Singleton.IsServer)
40+
if (m_NetworkManager != null && m_NetworkManager.CustomMessagingManager != null)
4641
{
47-
NetworkManager.Singleton.CustomMessagingManager.RegisterNamedMessageHandler(m_Name, ReceiveMessageThroughNetwork);
48-
m_HasRegisteredHandler = true;
49-
NetworkManager.Singleton.OnClientDisconnectCallback += OnClientDisconnect;
42+
m_NetworkManager.CustomMessagingManager.UnregisterNamedMessageHandler(m_Name);
5043
}
51-
52-
return base.Subscribe(handler);
5344
}
45+
base.Dispose();
46+
}
5447

55-
Debug.LogError("Cannot subscribe to NetworkedMessageChannel. NetworkManager is not initialized.");
56-
return null;
48+
void OnClientConnected(ulong clientId)
49+
{
50+
RegisterHandler();
5751
}
5852

59-
void OnClientDisconnect(ulong clientId)
53+
void RegisterHandler()
6054
{
61-
m_HasRegisteredHandler = false;
62-
NetworkManager.Singleton.OnClientConnectedCallback -= OnClientDisconnect;
63-
NetworkManager.Singleton.CustomMessagingManager.UnregisterNamedMessageHandler(m_Name);
55+
// Only register message handler on clients
56+
if (!m_NetworkManager.IsServer)
57+
{
58+
m_NetworkManager.CustomMessagingManager.RegisterNamedMessageHandler(m_Name, ReceiveMessageThroughNetwork);
59+
}
6460
}
6561

6662
public override void Publish(T message)
6763
{
68-
if (NetworkManager.Singleton.IsServer)
64+
if (m_NetworkManager.IsServer)
6965
{
7066
// send message to clients, then publish locally
7167
SendMessageThroughNetwork(message);
@@ -81,7 +77,7 @@ void SendMessageThroughNetwork(T message)
8177
{
8278
var writer = new FastBufferWriter(FastBufferWriter.GetWriteSize<T>(), Allocator.Temp);
8379
writer.WriteValueSafe(message);
84-
NetworkManager.Singleton.CustomMessagingManager.SendNamedMessageToAll(m_Name, writer);
80+
m_NetworkManager.CustomMessagingManager.SendNamedMessageToAll(m_Name, writer);
8581
}
8682

8783
void ReceiveMessageThroughNetwork(ulong clientID, FastBufferReader reader)

Assets/Scripts/Infrastructure/Unity.BossRoom.Infrastructure.asmdef

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
"rootNamespace": "",
44
"references": [
55
"Unity.Netcode.Runtime",
6-
"Unity.TextMeshPro"
6+
"Unity.TextMeshPro",
7+
"VContainer"
78
],
89
"includePlatforms": [],
910
"excludePlatforms": [],

0 commit comments

Comments
 (0)