From eebc0e428eacc2f92fe0195f5226c17874b825d8 Mon Sep 17 00:00:00 2001 From: Westin Miller Date: Fri, 18 Aug 2017 21:27:09 -0700 Subject: [PATCH 1/2] Fix that actually fixes the underlying problem with #69 --- Torch/Managers/MultiplayerManager.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Torch/Managers/MultiplayerManager.cs b/Torch/Managers/MultiplayerManager.cs index bc53dc8..ac67b3c 100644 --- a/Torch/Managers/MultiplayerManager.cs +++ b/Torch/Managers/MultiplayerManager.cs @@ -210,12 +210,16 @@ namespace Torch.Managers { if (handle.Method.Name == "GameServer_ValidateAuthTicketResponse") { - SteamServerAPI.Instance.GameServer.ValidateAuthTicketResponse -= handle as ValidateAuthTicketResponse; + SteamServerAPI.Instance.GameServer.ValidateAuthTicketResponse -= + handle as ValidateAuthTicketResponse; Log.Debug("Removed GameServer_ValidateAuthTicketResponse"); } } } - eventField = typeof(GameServer).GetField("UserGroupStatus", BindingFlags.NonPublic | BindingFlags.Instance); + else + Log.Warn("Unable to unhook the ValidateAuthTicketResponse event"); + + eventField = typeof(GameServer).GetField("UserGroupStatusResponse", BindingFlags.NonPublic | BindingFlags.Instance); eventDel = eventField?.GetValue(SteamServerAPI.Instance.GameServer) as MulticastDelegate; if (eventDel != null) { @@ -227,7 +231,8 @@ namespace Torch.Managers Log.Debug("Removed GameServer_UserGroupStatus"); } } - } + } else + Log.Warn("Unable to unhook the UserGroupStatusResponse event"); } //Largely copied from SE @@ -337,7 +342,6 @@ namespace Torch.Managers private void UserAccepted(ulong steamId) { - _members.Remove(steamId); typeof(MyDedicatedServerBase).GetMethod("UserAccepted", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(MyMultiplayer.Static, new object[] {steamId}); var vm = new PlayerViewModel(steamId) {State = ConnectionState.Connected}; Log.Info($"Player {vm.Name} joined ({vm.SteamId})"); From 526ff6fff0085b860d8d7e7158c110b3133b0dd5 Mon Sep 17 00:00:00 2001 From: Westin Miller Date: Fri, 18 Aug 2017 22:31:03 -0700 Subject: [PATCH 2/2] Provide some semblance of compile time checking. --- Torch/Managers/MultiplayerManager.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Torch/Managers/MultiplayerManager.cs b/Torch/Managers/MultiplayerManager.cs index ac67b3c..bdd5d44 100644 --- a/Torch/Managers/MultiplayerManager.cs +++ b/Torch/Managers/MultiplayerManager.cs @@ -203,7 +203,7 @@ namespace Torch.Managers /// private static void RemoveHandlers() { - var eventField = typeof(GameServer).GetField("ValidateAuthTicketResponse", BindingFlags.NonPublic | BindingFlags.Instance); + var eventField = typeof(GameServer).GetField("" + nameof(SteamServerAPI.Instance.GameServer.ValidateAuthTicketResponse), BindingFlags.NonPublic | BindingFlags.Instance); if (eventField?.GetValue(SteamServerAPI.Instance.GameServer) is MulticastDelegate eventDel) { foreach (var handle in eventDel.GetInvocationList()) @@ -217,9 +217,9 @@ namespace Torch.Managers } } else - Log.Warn("Unable to unhook the ValidateAuthTicketResponse event"); + Log.Warn("Unable to unhook GameServer_ValidateAuthTicketResponse from the ValidateAuthTicketResponse event"); - eventField = typeof(GameServer).GetField("UserGroupStatusResponse", BindingFlags.NonPublic | BindingFlags.Instance); + eventField = typeof(GameServer).GetField("" + nameof(SteamServerAPI.Instance.GameServer.UserGroupStatus), BindingFlags.NonPublic | BindingFlags.Instance); eventDel = eventField?.GetValue(SteamServerAPI.Instance.GameServer) as MulticastDelegate; if (eventDel != null) { @@ -232,7 +232,7 @@ namespace Torch.Managers } } } else - Log.Warn("Unable to unhook the UserGroupStatusResponse event"); + Log.Warn("Unable to unhook GameServer_UserGroupStatus from the UserGroupStatusResponse event"); } //Largely copied from SE