From: miniduikboot Date: Wed, 16 Feb 2022 21:31:23 +0000 (+0100) Subject: Deprecate JoinGame errors X-Git-Tag: v1.7.0~10^2~4 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=919b0940185db622074846e98098c7942f417ff8;p=rhonda%2Fimpostor.git Deprecate JoinGame errors Starting from version 2021.11.9, join errors no longer exist, instead a client will show the message "An unknown error disconnected you from the server". As a workaround, the connection is disconnected entirely when an error occurs, which allows us to show a custom message. --- diff --git a/src/Impostor.Api/Net/Messages/S2C/Message01JoinGameS2C.cs b/src/Impostor.Api/Net/Messages/S2C/Message01JoinGameS2C.cs index 6bd38c9..bbfb9bb 100644 --- a/src/Impostor.Api/Net/Messages/S2C/Message01JoinGameS2C.cs +++ b/src/Impostor.Api/Net/Messages/S2C/Message01JoinGameS2C.cs @@ -22,6 +22,7 @@ namespace Impostor.Api.Net.Messages.S2C writer.EndMessage(); } + [Obsolete("JoinGame errors are no longer serialized by 2021.11.9 and up, disconnect clients instead.")] public static void SerializeError(IMessageWriter writer, bool clear, DisconnectReason reason, string? message = null) { if (clear) diff --git a/src/Impostor.Server/Net/Manager/ClientManager.cs b/src/Impostor.Server/Net/Manager/ClientManager.cs index a4ab5cc..58405b1 100644 --- a/src/Impostor.Server/Net/Manager/ClientManager.cs +++ b/src/Impostor.Server/Net/Manager/ClientManager.cs @@ -85,25 +85,19 @@ namespace Impostor.Server.Net.Manager _ => throw new ArgumentOutOfRangeException(), }; - Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, message); - - await connection.SendAsync(packet); + await DisconnectConnection(connection, message); return; } if (name.Length > 10) { - using var packet = MessageWriter.Get(MessageType.Reliable); - Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.UsernameLength); - await connection.SendAsync(packet); + await DisconnectConnection(connection, DisconnectMessages.UsernameLength); return; } if (string.IsNullOrWhiteSpace(name)) { - using var packet = MessageWriter.Get(MessageType.Reliable); - Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.UsernameIllegalCharacters); - await connection.SendAsync(packet); + await DisconnectConnection(connection, DisconnectMessages.UsernameIllegalCharacters); return; } @@ -153,5 +147,14 @@ namespace Impostor.Server.Net.Manager // This may happen in the very rare case that version X is supported, X+2 is as well, but X+1 is not. return VersionCompareResult.Unknown; } + + private async ValueTask DisconnectConnection(IHazelConnection connection, string message) + { + using var writer = MessageWriter.Get(); + MessageDisconnect.Serialize(writer, true, DisconnectReason.Custom, message); + + await connection.DisconnectAsync(DisconnectReason.Custom.ToString(), writer); + return; + } } } diff --git a/src/Impostor.Server/Net/Redirector/ClientRedirector.cs b/src/Impostor.Server/Net/Redirector/ClientRedirector.cs index a96ca73..f463abb 100644 --- a/src/Impostor.Server/Net/Redirector/ClientRedirector.cs +++ b/src/Impostor.Server/Net/Redirector/ClientRedirector.cs @@ -56,27 +56,25 @@ namespace Impostor.Server.Net.Redirector { Message01JoinGameC2S.Deserialize(reader, out var gameCode); - using var packet = MessageWriter.Get(MessageType.Reliable); var endpoint = await _nodeLocator.FindAsync(gameCode); if (endpoint == null) { - Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.GameMissing); + await DisconnectAsync(DisconnectReason.GameMissing); } else { + using var packet = MessageWriter.Get(MessageType.Reliable); Message13RedirectS2C.Serialize(packet, false, endpoint); + await Connection.SendAsync(packet); } - await Connection.SendAsync(packet); break; } case MessageFlags.GetGameListV2: { // TODO: Implement. - using var packet = MessageWriter.Get(MessageType.Reliable); - Message01JoinGameS2C.SerializeError(packet, false, DisconnectReason.Custom, DisconnectMessages.NotImplemented); - await Connection.SendAsync(packet); + await DisconnectAsync(DisconnectReason.Custom, DisconnectMessages.NotImplemented); break; }