Skip to content

refactor!: NetworkSceneManager is no longer static #738

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 23 commits into from
Apr 19, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
bf2a69f
refactor: InternalMessageHandler is no longer static
TwoTenPvP Apr 6, 2021
b74d51b
Merge branch 'develop' into singleton-removal-message-handler
TwoTenPvP Apr 6, 2021
9cbc9fc
Merge
TwoTenPvP Apr 6, 2021
e9e3f89
Added tests
TwoTenPvP Apr 8, 2021
de31f81
Minor style fix
TwoTenPvP Apr 8, 2021
2802651
Merge branch 'develop' into singleton-removal-message-handler
TwoTenPvP Apr 8, 2021
12c4dbd
renamed test file
TwoTenPvP Apr 9, 2021
708018e
Merge branch 'develop' into singleton-removal-message-handler
TwoTenPvP Apr 9, 2021
12054c5
Added NetworkManager field
TwoTenPvP Apr 12, 2021
f9b27f2
Fix assignment when overriden
TwoTenPvP Apr 12, 2021
18f8fc8
refactor!: CustomMessageManager is no longer static
TwoTenPvP Apr 15, 2021
49c9a1c
refactor!: NetworkSceneManager is no longer static
TwoTenPvP Apr 15, 2021
3ab6a12
add tests
TwoTenPvP Apr 15, 2021
a6c6d43
Fixed missing conversion
TwoTenPvP Apr 15, 2021
4ec2368
Merge branch 'singleton-removal-custom-message-manager' into singleto…
TwoTenPvP Apr 15, 2021
a4f6e6a
Merge branch 'develop' into singleton-removal-scene-manager
TwoTenPvP Apr 16, 2021
eed6f7a
Updated tests
TwoTenPvP Apr 16, 2021
6f0be0b
Fixed test setup
TwoTenPvP Apr 16, 2021
c3aecd8
Now uses instance
TwoTenPvP Apr 16, 2021
553979c
Progress uses instance
TwoTenPvP Apr 16, 2021
e995df1
Merge branch 'develop' into singleton-removal-scene-manager
TwoTenPvP Apr 16, 2021
dd0d039
Merge branch 'develop' into singleton-removal-scene-manager
TwoTenPvP Apr 19, 2021
aeff873
Merge branch 'develop' into singleton-removal-scene-manager
TwoTenPvP Apr 19, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 14 additions & 10 deletions com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ public class NetworkManager : MonoBehaviour, INetworkUpdateSystem, IProfilableTr

public CustomMessagingManager CustomMessagingManager { get; private set; }

public NetworkSceneManager SceneManager { get; private set; }

internal BufferManager BufferManager { get; private set; }

// Has to have setter for tests
Expand Down Expand Up @@ -224,7 +226,7 @@ private void OnValidate()
}
}

var activeScene = SceneManager.GetActiveScene();
var activeScene = UnityEngine.SceneManagement.SceneManager.GetActiveScene();
var activeSceneName = activeScene.name;
if (!NetworkConfig.RegisteredScenes.Contains(activeSceneName))
{
Expand Down Expand Up @@ -301,6 +303,8 @@ private void Init(bool server)

CustomMessagingManager = new CustomMessagingManager(this);

SceneManager = new NetworkSceneManager(this);

BufferManager = new BufferManager();

if (MessageHandler == null)
Expand All @@ -309,11 +313,6 @@ private void Init(bool server)
MessageHandler = new InternalMessageHandler(this);
}

NetworkSceneManager.RegisteredSceneNames.Clear();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume we no longer need this because, even if we call Init() multiple times (e.g. call StartServer again after stopping) we are creating a new NetworkSceneManager, and the old one will be out of scope and be freed

Still, is there value in, if there already is a NetworkSceneManager, that we call perhaps a cleanup function on it that would do things like the code that was removed? And then ditto for the others here (CustomMessagingManager, BufferManager, etc)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This way we do it currently fully cleans it up though. (Lists etc are actually thrown out instead of their Count being set to 0 and their underlying array still being present).

NetworkSceneManager.SceneIndexToString.Clear();
NetworkSceneManager.SceneNameToIndex.Clear();
NetworkSceneManager.SceneSwitchProgresses.Clear();

if (NetworkConfig.NetworkTransport == null)
{
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
Expand Down Expand Up @@ -355,12 +354,12 @@ private void Init(bool server)

for (int i = 0; i < NetworkConfig.RegisteredScenes.Count; i++)
{
NetworkSceneManager.RegisteredSceneNames.Add(NetworkConfig.RegisteredScenes[i]);
NetworkSceneManager.SceneIndexToString.Add((uint)i, NetworkConfig.RegisteredScenes[i]);
NetworkSceneManager.SceneNameToIndex.Add(NetworkConfig.RegisteredScenes[i], (uint)i);
SceneManager.RegisteredSceneNames.Add(NetworkConfig.RegisteredScenes[i]);
SceneManager.SceneIndexToString.Add((uint)i, NetworkConfig.RegisteredScenes[i]);
SceneManager.SceneNameToIndex.Add(NetworkConfig.RegisteredScenes[i], (uint)i);
}

NetworkSceneManager.SetCurrentSceneIndex();
SceneManager.SetCurrentSceneIndex();
}

for (int i = 0; i < NetworkConfig.NetworkPrefabs.Count; i++)
Expand Down Expand Up @@ -698,6 +697,11 @@ public void Shutdown()
SpawnManager = null;
}

if (SceneManager != null)
{
SceneManager = null;
}

if (MessageHandler != null)
{
MessageHandler = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ public void HandleConnectionApproved(ulong clientId, Stream stream, float receiv
sceneSwitchProgressGuid = new Guid(reader.ReadByteArray());
}

bool sceneSwitch = NetworkManager.NetworkConfig.EnableSceneManagement && NetworkSceneManager.HasSceneMismatch(sceneIndex);
bool sceneSwitch = NetworkManager.NetworkConfig.EnableSceneManagement && NetworkManager.SceneManager.HasSceneMismatch(sceneIndex);

float netTime = reader.ReadSinglePacked();
NetworkManager.UpdateNetworkTime(clientId, netTime, receiveTime, true);
Expand All @@ -119,7 +119,7 @@ void DelayedSpawnAction(Stream continuationStream)
{
using (var continuationReader = PooledNetworkReader.Get(continuationStream))
{
if (!NetworkManager.Singleton.NetworkConfig.EnableSceneManagement)
if (!NetworkManager.NetworkConfig.EnableSceneManagement)
{
NetworkManager.SpawnManager.DestroySceneObjects();
}
Expand Down Expand Up @@ -153,8 +153,8 @@ void DelayedSpawnAction(Stream continuationStream)
rot = Quaternion.Euler(continuationReader.ReadSinglePacked(), continuationReader.ReadSinglePacked(), continuationReader.ReadSinglePacked());
}

var networkObject = NetworkManager.Singleton.SpawnManager.CreateLocalNetworkObject(softSync, prefabHash, ownerId, parentNetworkId, pos, rot);
NetworkManager.Singleton.SpawnManager.SpawnNetworkObjectLocally(networkObject, networkId, softSync, isPlayerObject, ownerId, continuationStream, false, 0, true, false);
var networkObject = NetworkManager.SpawnManager.CreateLocalNetworkObject(softSync, prefabHash, ownerId, parentNetworkId, pos, rot);
NetworkManager.SpawnManager.SpawnNetworkObjectLocally(networkObject, networkId, softSync, isPlayerObject, ownerId, continuationStream, false, 0, true, false);

Queue<BufferManager.BufferedMessage> bufferQueue = NetworkManager.BufferManager.ConsumeBuffersForNetworkId(networkId);

Expand Down Expand Up @@ -193,7 +193,7 @@ void OnSceneLoadComplete()

onSceneLoaded = (oldScene, newScene) => { OnSceneLoadComplete(); };
SceneManager.activeSceneChanged += onSceneLoaded;
NetworkSceneManager.OnFirstSceneSwitchSync(sceneIndex, sceneSwitchProgressGuid);
m_NetworkManager.SceneManager.OnFirstSceneSwitchSync(sceneIndex, sceneSwitchProgressGuid);
}
else
{
Expand Down Expand Up @@ -237,8 +237,8 @@ public void HandleAddObject(ulong clientId, Stream stream)
var hasPayload = reader.ReadBool();
var payLoadLength = hasPayload ? reader.ReadInt32Packed() : 0;

var networkObject = NetworkManager.Singleton.SpawnManager.CreateLocalNetworkObject(softSync, prefabHash, ownerClientId, parentNetworkId, pos, rot);
NetworkManager.Singleton.SpawnManager.SpawnNetworkObjectLocally(networkObject, networkId, softSync, isPlayerObject, ownerClientId, stream, hasPayload, payLoadLength, true, false);
var networkObject = NetworkManager.SpawnManager.CreateLocalNetworkObject(softSync, prefabHash, ownerClientId, parentNetworkId, pos, rot);
NetworkManager.SpawnManager.SpawnNetworkObjectLocally(networkObject, networkId, softSync, isPlayerObject, ownerClientId, stream, hasPayload, payLoadLength, true, false);

Queue<BufferManager.BufferedMessage> bufferQueue = NetworkManager.BufferManager.ConsumeBuffersForNetworkId(networkId);

Expand Down Expand Up @@ -287,7 +287,7 @@ public void HandleSwitchScene(ulong clientId, Stream stream)
objectBuffer.CopyUnreadFrom(stream);
objectBuffer.Position = 0;

NetworkSceneManager.OnSceneSwitch(sceneIndex, switchSceneGuid, objectBuffer);
m_NetworkManager.SceneManager.OnSceneSwitch(sceneIndex, switchSceneGuid, objectBuffer);
}
#if DEVELOPMENT_BUILD || UNITY_EDITOR
s_HandleSwitchScene.End();
Expand All @@ -301,7 +301,7 @@ public void HandleClientSwitchSceneCompleted(ulong clientId, Stream stream)
#endif
using (var reader = PooledNetworkReader.Get(stream))
{
NetworkSceneManager.OnClientSwitchSceneCompleted(clientId, new Guid(reader.ReadByteArray()));
m_NetworkManager.SceneManager.OnClientSwitchSceneCompleted(clientId, new Guid(reader.ReadByteArray()));
}
#if DEVELOPMENT_BUILD || UNITY_EDITOR
s_HandleClientSwitchSceneCompleted.End();
Expand Down
Loading