From 4b8b88d55067a878df91d5c419bacc99995883b4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Albin=20Cor=C3=A9n?= <2108U9@gmail.com>
Date: Mon, 2 Apr 2018 17:33:23 +0200
Subject: [PATCH] Added scene cleanup & checks for already running instances
---
MLAPI/MonoBehaviours/Core/NetworkingManager.cs | 18 ++++++++++++++++++
.../Core/SpawnManager.cs | 9 +++++++++
2 files changed, 27 insertions(+)
diff --git a/MLAPI/MonoBehaviours/Core/NetworkingManager.cs b/MLAPI/MonoBehaviours/Core/NetworkingManager.cs
index 80d8a5d..3e6f1b5 100644
--- a/MLAPI/MonoBehaviours/Core/NetworkingManager.cs
+++ b/MLAPI/MonoBehaviours/Core/NetworkingManager.cs
@@ -365,6 +365,12 @@ namespace MLAPI.MonoBehaviours.Core
/// The NetworkingConfiguration to use
public void StartServer()
{
+ if (isServer || isClient)
+ {
+ Debug.LogWarning("MLAPI: Cannot start server while an instance is already running");
+ return;
+ }
+
ConnectionConfig cConfig = Init();
if (NetworkConfig.ConnectionApproval)
{
@@ -389,6 +395,12 @@ namespace MLAPI.MonoBehaviours.Core
/// The NetworkingConfiguration to use
public void StartClient()
{
+ if (isServer || isClient)
+ {
+ Debug.LogWarning("MLAPI: Cannot start client while an instance is already running");
+ return;
+ }
+
ConnectionConfig cConfig = Init();
HostTopology hostTopology = new HostTopology(cConfig, NetworkConfig.MaxConnections);
hostId = NetworkTransport.AddHost(hostTopology, 0, null);
@@ -453,6 +465,11 @@ namespace MLAPI.MonoBehaviours.Core
/// The NetworkingConfiguration to use
public void StartHost()
{
+ if (isServer || isClient)
+ {
+ Debug.LogWarning("MLAPI: Cannot start host while an instance is already running");
+ return;
+ }
ConnectionConfig cConfig = Init();
if (NetworkConfig.ConnectionApproval)
{
@@ -502,6 +519,7 @@ namespace MLAPI.MonoBehaviours.Core
isListening = false;
_isClient = false;
_isServer = false;
+ SpawnManager.DestroyNonSceneObjects();
NetworkTransport.Shutdown();
}
diff --git a/MLAPI/NetworkingManagerComponents/Core/SpawnManager.cs b/MLAPI/NetworkingManagerComponents/Core/SpawnManager.cs
index 6704ae7..f9de52c 100644
--- a/MLAPI/NetworkingManagerComponents/Core/SpawnManager.cs
+++ b/MLAPI/NetworkingManagerComponents/Core/SpawnManager.cs
@@ -75,6 +75,15 @@ namespace MLAPI.NetworkingManagerComponents.Core
}
}
+ internal static void DestroyNonSceneObjects()
+ {
+ foreach (KeyValuePair netObject in spawnedObjects)
+ {
+ if (!netObject.Value.sceneObject)
+ MonoBehaviour.Destroy(netObject.Value.gameObject);
+ }
+ }
+
internal static GameObject SpawnObject(int spawnablePrefabIndex, uint networkId, int ownerId, Vector3 position, Quaternion rotation)
{
GameObject go = MonoBehaviour.Instantiate(netManager.SpawnablePrefabs[spawnablePrefabIndex]);