From d1f28bf2dfad681bad97d0b0f218e0e688628fff Mon Sep 17 00:00:00 2001 From: Mister_Nebula <41904486+misternebula@users.noreply.github.com> Date: Sat, 12 Dec 2020 11:27:28 +0000 Subject: [PATCH] start of disconnect remake --- QSB/Animation/AnimationSync.cs | 1 - QSB/EventsCore/EventNames.cs | 1 - QSB/EventsCore/EventType.cs | 1 - QSB/EventsCore/QSBEventManager.cs | 1 - QSB/Instruments/InstrumentsManager.cs | 1 - QSB/MessagesCore/MessageHandler.cs | 6 +-- QSB/Player/Events/PlayerLeaveEvent.cs | 32 -------------- QSB/Player/Events/PlayerLeaveMessage.cs | 24 ---------- QSB/QSB.csproj | 2 - QSB/QSBNetworkManager.cs | 59 +------------------------ QSB/TransformSync/TransformSync.cs | 5 +++ 11 files changed, 9 insertions(+), 124 deletions(-) delete mode 100644 QSB/Player/Events/PlayerLeaveEvent.cs delete mode 100644 QSB/Player/Events/PlayerLeaveMessage.cs diff --git a/QSB/Animation/AnimationSync.cs b/QSB/Animation/AnimationSync.cs index 3c08a2f9..b18723c9 100644 --- a/QSB/Animation/AnimationSync.cs +++ b/QSB/Animation/AnimationSync.cs @@ -43,7 +43,6 @@ namespace QSB.Animation private void OnDestroy() { - _netAnim.enabled = false; if (_playerController == null) { return; diff --git a/QSB/EventsCore/EventNames.cs b/QSB/EventsCore/EventNames.cs index cac94b86..1a861f71 100644 --- a/QSB/EventsCore/EventNames.cs +++ b/QSB/EventsCore/EventNames.cs @@ -21,7 +21,6 @@ public static string QSBPlayerDeath = "QSBPlayerDeath"; public static string QSBPlayerJoin = "QSBPlayerJoin"; - public static string QSBPlayerLeave = "QSBPlayerLeave"; public static string QSBPlayerReady = "QSBPlayerReady"; public static string QSBSectorChange = "QSBSectorChange"; public static string QSBPlayerStatesRequest = "QSBPlayerStatesRequest"; diff --git a/QSB/EventsCore/EventType.cs b/QSB/EventsCore/EventType.cs index 0d6cc30f..87b6d26b 100644 --- a/QSB/EventsCore/EventType.cs +++ b/QSB/EventsCore/EventType.cs @@ -13,7 +13,6 @@ ProbeLauncherActiveChange, SuitActiveChange, PlayerJoin, - PlayerLeave, PlayerDeath, PlayerSectorChange, PlayerReady, diff --git a/QSB/EventsCore/QSBEventManager.cs b/QSB/EventsCore/QSBEventManager.cs index 53249ffb..73f3759f 100644 --- a/QSB/EventsCore/QSBEventManager.cs +++ b/QSB/EventsCore/QSBEventManager.cs @@ -34,7 +34,6 @@ namespace QSB.EventsCore new PlayerProbeLauncherEvent(), new PlayerProbeEvent(), new PlayerSectorEvent(), - new PlayerLeaveEvent(), new PlayerDeathEvent(), new PlayerStatesRequestEvent(), new ElevatorEvent(), diff --git a/QSB/Instruments/InstrumentsManager.cs b/QSB/Instruments/InstrumentsManager.cs index e5ab1c0d..e430911b 100644 --- a/QSB/Instruments/InstrumentsManager.cs +++ b/QSB/Instruments/InstrumentsManager.cs @@ -45,7 +45,6 @@ namespace QSB.Instruments { return; } - DebugLog.DebugWrite($"OnDestroy {PlayerId}"); QSBInputManager.ChertTaunt -= () => StartInstrument(AnimationType.Chert); QSBInputManager.EskerTaunt -= () => StartInstrument(AnimationType.Esker); QSBInputManager.FeldsparTaunt -= () => StartInstrument(AnimationType.Feldspar); diff --git a/QSB/MessagesCore/MessageHandler.cs b/QSB/MessagesCore/MessageHandler.cs index aa6a07c8..c9806598 100644 --- a/QSB/MessagesCore/MessageHandler.cs +++ b/QSB/MessagesCore/MessageHandler.cs @@ -1,6 +1,4 @@ -using OWML.Common; -using QSB.EventsCore; -using QSB.Utility; +using QSB.EventsCore; using QuantumUNET; using QuantumUNET.Components; using QuantumUNET.Messages; @@ -35,8 +33,8 @@ namespace QSB.Messaging { if (QSBNetworkServer.handlers.Keys.Contains(_eventType)) { - DebugLog.ToConsole($"Warning - NetworkServer already contains a handler for EventType {BaseEventType}", MessageType.Warning); QSBNetworkServer.handlers.Remove(_eventType); + QSBNetworkManagerUNET.singleton.client.handlers.Remove(_eventType); } QSBNetworkServer.RegisterHandler(_eventType, OnServerReceiveMessageHandler); QSBNetworkManagerUNET.singleton.client.RegisterHandler(_eventType, OnClientReceiveMessageHandler); diff --git a/QSB/Player/Events/PlayerLeaveEvent.cs b/QSB/Player/Events/PlayerLeaveEvent.cs deleted file mode 100644 index 4ae67c54..00000000 --- a/QSB/Player/Events/PlayerLeaveEvent.cs +++ /dev/null @@ -1,32 +0,0 @@ -using OWML.Common; -using QSB.EventsCore; -using QSB.Utility; -using System.Linq; - -namespace QSB.Player.Events -{ - public class PlayerLeaveEvent : QSBEvent - { - public override EventType Type => EventType.PlayerLeave; - - public override void SetupListener() => GlobalMessenger.AddListener(EventNames.QSBPlayerLeave, Handler); - public override void CloseListener() => GlobalMessenger.RemoveListener(EventNames.QSBPlayerLeave, Handler); - - private void Handler(uint playerId, uint[] netIds) => SendEvent(CreateMessage(playerId, netIds)); - - private PlayerLeaveMessage CreateMessage(uint playerId, uint[] netIds) => new PlayerLeaveMessage - { - AboutId = playerId, - NetIds = netIds - }; - - public override void OnReceiveRemote(bool server, PlayerLeaveMessage message) - { - var playerName = QSBPlayerManager.GetPlayer(message.AboutId).Name; - DebugLog.ToAll($"{playerName} disconnected.", MessageType.Info); - QSBPlayerManager.GetPlayer(message.AboutId).HudMarker?.Remove(); - QSBPlayerManager.RemovePlayer(message.AboutId); - message.NetIds.ToList().ForEach(netId => QSBNetworkManager.Instance.CleanupNetworkBehaviour(netId)); - } - } -} \ No newline at end of file diff --git a/QSB/Player/Events/PlayerLeaveMessage.cs b/QSB/Player/Events/PlayerLeaveMessage.cs deleted file mode 100644 index 08d3126b..00000000 --- a/QSB/Player/Events/PlayerLeaveMessage.cs +++ /dev/null @@ -1,24 +0,0 @@ -using QSB.Messaging; -using QuantumUNET; -using System; -using System.Linq; - -namespace QSB.Player.Events -{ - public class PlayerLeaveMessage : PlayerMessage - { - public uint[] NetIds { get; set; } - - public override void Deserialize(QSBNetworkReader reader) - { - base.Deserialize(reader); - NetIds = reader.ReadString().Split(',').Select(x => Convert.ToUInt32(x)).ToArray(); - } - - public override void Serialize(QSBNetworkWriter writer) - { - base.Serialize(writer); - writer.Write(string.Join(",", NetIds.Select(x => x.ToString()).ToArray())); - } - } -} \ No newline at end of file diff --git a/QSB/QSB.csproj b/QSB/QSB.csproj index 54dfc901..13307919 100644 --- a/QSB/QSB.csproj +++ b/QSB/QSB.csproj @@ -171,7 +171,6 @@ - @@ -182,7 +181,6 @@ - diff --git a/QSB/QSBNetworkManager.cs b/QSB/QSBNetworkManager.cs index 24bfd7e9..dba8b5d4 100644 --- a/QSB/QSBNetworkManager.cs +++ b/QSB/QSBNetworkManager.cs @@ -218,10 +218,6 @@ namespace QSB QSBEventManager.Reset(); QSBPlayerManager.PlayerList.ForEach(player => player.HudMarker?.Remove()); - foreach (var player in QSBPlayerManager.PlayerList) - { - QSBPlayerManager.GetPlayerNetIds(player).ForEach(CleanupNetworkBehaviour); - } QSBPlayerManager.RemoveAllPlayers(); QSBWorldSync.RemoveWorldObjects(); @@ -236,10 +232,8 @@ namespace QSB public override void OnServerDisconnect(QSBNetworkConnection connection) // Called on the server when any client disconnects { + base.OnServerDisconnect(connection); DebugLog.DebugWrite("OnServerDisconnect", MessageType.Info); - var player = connection.GetPlayer(); - var netIds = connection.ClientOwnedObjects.Select(x => x.Value).ToArray(); - GlobalMessenger.FireEvent(EventNames.QSBPlayerLeave, player.PlayerId, netIds); foreach (var item in QSBWorldSync.OrbSyncList) { @@ -250,8 +244,7 @@ namespace QSB } } - player.HudMarker?.Remove(); - CleanupConnection(connection); + QSBPlayerManager.PlayerList.ForEach(player => player.HudMarker?.Remove()); } public override void OnStopServer() @@ -263,7 +256,6 @@ namespace QSB QSBEventManager.Reset(); DebugLog.ToConsole("[S] Server stopped!", MessageType.Info); QSBPlayerManager.PlayerList.ForEach(player => player.HudMarker?.Remove()); - QSBNetworkServer.connections.ToList().ForEach(CleanupConnection); QSBWorldSync.RemoveWorldObjects(); QSBWorldSync.RemoveWorldObjects(); @@ -272,52 +264,5 @@ namespace QSB base.OnStopServer(); } - - private void CleanupConnection(QSBNetworkConnection connection) - { - var player = connection.GetPlayer(); - DebugLog.ToConsole($"{player.Name} disconnected.", MessageType.Info); - QSBPlayerManager.RemovePlayer(player.PlayerId); - - var netIds = connection.ClientOwnedObjects?.Select(x => x.Value).ToList(); - netIds.ForEach(CleanupNetworkBehaviour); - } - - public void CleanupNetworkBehaviour(uint netId) - { - DebugLog.DebugWrite($"Cleaning up netId {netId}"); - // Multiple networkbehaviours can use the same networkidentity (same netId), so get all of them - var networkBehaviours = FindObjectsOfType() - .Where(x => x != null && x.NetId.Value == netId); - foreach (var networkBehaviour in networkBehaviours) - { - var transformSync = networkBehaviour.GetComponent(); - - if (transformSync != null) - { - DebugLog.DebugWrite($" * Removing TransformSync from syncobjects"); - QSBPlayerManager.PlayerSyncObjects.Remove(transformSync); - if (transformSync.SyncedTransform != null && netId != QSBPlayerManager.LocalPlayerId && !networkBehaviour.HasAuthority) - { - DebugLog.DebugWrite($" * Destroying {transformSync.SyncedTransform.gameObject.name}"); - Destroy(transformSync.SyncedTransform.gameObject); - } - } - - var animationSync = networkBehaviour.GetComponent(); - - if (animationSync != null) - { - DebugLog.DebugWrite($" * Removing AnimationSync from syncobjects"); - QSBPlayerManager.PlayerSyncObjects.Remove(animationSync); - } - - if (!networkBehaviour.HasAuthority) - { - DebugLog.DebugWrite($" * Destroying {networkBehaviour.gameObject.name}"); - Destroy(networkBehaviour.gameObject); - } - } - } } } \ No newline at end of file diff --git a/QSB/TransformSync/TransformSync.cs b/QSB/TransformSync/TransformSync.cs index 071276df..c87e1314 100644 --- a/QSB/TransformSync/TransformSync.cs +++ b/QSB/TransformSync/TransformSync.cs @@ -32,6 +32,10 @@ namespace QSB.TransformSync protected virtual void OnDestroy() { QSBPlayerManager.PlayerSyncObjects.Remove(this); + if (!HasAuthority && SyncedTransform != null) + { + Destroy(SyncedTransform.gameObject); + } QSBSceneManager.OnSceneLoaded -= OnSceneLoaded; } @@ -43,6 +47,7 @@ namespace QSB.TransformSync protected void Init() { SyncedTransform = HasAuthority ? InitLocalTransform() : InitRemoteTransform(); + SetReferenceSector(QSBSectorManager.Instance.GetClosestSector(SyncedTransform)); _isInitialized = true; _isVisible = true; }