This commit is contained in:
2025-03-28 15:24:44 +02:00
parent cc9eacca8d
commit 6783efdb6a
25 changed files with 1077 additions and 364 deletions

View File

@@ -33,6 +33,8 @@ public enum NetworkMessageType : byte
public static partial class NetworkManager
{
public delegate bool OnMessageDecl(ref NetworkEvent networkEvent);
public delegate bool OnClientConnectingDecl(NetworkConnection sender);
public delegate void OnClientConnectedDecl(NetworkConnection sender);
private static bool initialized;
@@ -45,28 +47,76 @@ public static partial class NetworkManager
private static readonly ushort MaximumClients = 32;
private static List<OnMessageDecl> OnClientMessageDelegates = new(3);
private static List<OnClientConnectingDecl> OnClientConnectingDelegates = new(3);
private static List<OnClientConnectedDecl> OnClientConnectedDelegates = new(3);
private static List<OnMessageDecl> OnServerMessageDelegates = new(3);
private static List<OnClientConnectingDecl> OnServerConnectingDelegates = new(3);
private static List<OnClientConnectedDecl> OnServerConnectedDelegates = new(3);
public static void RegisterClientMessageCallback(OnMessageDecl deleg)
public static void RegisterClientCallbacks(OnMessageDecl onMessage, OnClientConnectingDecl onClientConnecting, OnClientConnectedDecl onClientConnected)
{
Assert.IsTrue(!OnClientMessageDelegates.Contains(deleg));
OnClientMessageDelegates.Add(deleg);
Assert.IsTrue(!OnClientMessageDelegates.Contains(onMessage));
OnClientMessageDelegates.Add(onMessage);
if (onClientConnecting != null)
{
Assert.IsTrue(!OnClientConnectingDelegates.Contains(onClientConnecting));
OnClientConnectingDelegates.Add(onClientConnecting);
}
if (onClientConnected != null)
{
Assert.IsTrue(!OnClientConnectedDelegates.Contains(onClientConnected));
OnClientConnectedDelegates.Add(onClientConnected);
}
}
public static void UnregisterClientMessageCallback(OnMessageDecl deleg)
public static void UnregisterClientCallbacks(OnMessageDecl onMessage, OnClientConnectingDecl onClientConnecting, OnClientConnectedDecl onClientConnected)
{
Assert.IsTrue(OnClientMessageDelegates.Contains(deleg));
OnClientMessageDelegates.Remove(deleg);
Assert.IsTrue(OnClientMessageDelegates.Contains(onMessage));
OnClientMessageDelegates.Remove(onMessage);
if (onClientConnecting != null)
{
Assert.IsTrue(OnClientConnectingDelegates.Contains(onClientConnecting));
OnClientConnectingDelegates.Remove(onClientConnecting);
}
if (onClientConnected != null)
{
Assert.IsTrue(OnClientConnectedDelegates.Contains(onClientConnected));
OnClientConnectedDelegates.Remove(onClientConnected);
}
}
public static void RegisterServerMessageCallback(OnMessageDecl deleg)
public static void RegisterServerCallbacks(OnMessageDecl onMessage, OnClientConnectingDecl onClientConnecting, OnClientConnectedDecl onClientConnected)
{
Assert.IsTrue(!OnServerMessageDelegates.Contains(deleg));
OnServerMessageDelegates.Add(deleg);
Assert.IsTrue(!OnServerMessageDelegates.Contains(onMessage));
OnServerMessageDelegates.Add(onMessage);
if (onClientConnecting != null)
{
Assert.IsTrue(!OnServerConnectingDelegates.Contains(onClientConnecting));
OnServerConnectingDelegates.Add(onClientConnecting);
}
if (onClientConnected != null)
{
Assert.IsTrue(!OnServerConnectedDelegates.Contains(onClientConnected));
OnServerConnectedDelegates.Add(onClientConnected);
}
}
public static void UnregisterServerMessageCallback(OnMessageDecl deleg)
public static void UnregisterServerCallbacks(OnMessageDecl onMessage, OnClientConnectingDecl onClientConnecting, OnClientConnectedDecl onClientConnected)
{
Assert.IsTrue(OnServerMessageDelegates.Contains(deleg));
OnServerMessageDelegates.Remove(deleg);
Assert.IsTrue(OnServerMessageDelegates.Contains(onMessage));
OnServerMessageDelegates.Remove(onMessage);
if (onClientConnecting != null)
{
Assert.IsTrue(OnServerConnectingDelegates.Contains(onClientConnecting));
OnServerConnectingDelegates.Remove(onClientConnecting);
}
if (onClientConnected != null)
{
Assert.IsTrue(OnServerConnectedDelegates.Contains(onClientConnected));
OnServerConnectedDelegates.Remove(onClientConnected);
}
}
public static string DebugLastHandledMessage = "";
@@ -129,22 +179,14 @@ public static partial class NetworkManager
client = null;
}
LocalPlayerClientId = 0;
//LocalPlayerClientId = 0;
#if FLAX_EDITOR
Editor.Instance.PlayModeEnd -= Cleanup;
//GameModeManager.Cleanup(); // FIXME
#endif
if (clientWorldStateManager != null)
{
clientWorldStateManager.Cleanup();
clientWorldStateManager = null;
}
if (serverWorldStateManager != null)
{
serverWorldStateManager.Cleanup();
serverWorldStateManager = null;
}
World.CleanupClient();
World.CleanupServer();
StopRecording();