From 33519a1ead0295189f7ce3dee807795cbfa36722 Mon Sep 17 00:00:00 2001 From: AeonLucid Date: Sun, 18 Oct 2020 04:53:14 +0200 Subject: [PATCH] Pass on exceptions to Hazel --- src/Impostor.Server.Api/Net/IClient.cs | 2 +- src/Impostor.Server.Hazel/HazelConnection.cs | 41 +++++++++---------- src/Impostor.Server.Hazel/HazelMatchmaker.cs | 19 +++------ src/Impostor.Server/Net/Client.cs | 20 +++++---- src/Impostor.Server/Net/ClientBase.cs | 3 +- .../Net/Manager/ClientManager.cs | 4 +- .../Net/Redirector/ClientRedirector.cs | 2 +- submodules/Hazel-Networking | 2 +- 8 files changed, 44 insertions(+), 49 deletions(-) diff --git a/src/Impostor.Server.Api/Net/IClient.cs b/src/Impostor.Server.Api/Net/IClient.cs index 064f51a..0283a75 100644 --- a/src/Impostor.Server.Api/Net/IClient.cs +++ b/src/Impostor.Server.Api/Net/IClient.cs @@ -61,6 +61,6 @@ namespace Impostor.Server.Net ValueTask HandleMessageAsync(IMessage message); - ValueTask HandleDisconnectAsync(); + ValueTask HandleDisconnectAsync(string reason); } } \ No newline at end of file diff --git a/src/Impostor.Server.Hazel/HazelConnection.cs b/src/Impostor.Server.Hazel/HazelConnection.cs index 9d52c5b..b0f5d5e 100644 --- a/src/Impostor.Server.Hazel/HazelConnection.cs +++ b/src/Impostor.Server.Hazel/HazelConnection.cs @@ -33,37 +33,36 @@ namespace Impostor.Server.Hazel { if (Client != null) { - await Client.HandleDisconnectAsync(); + await Client.HandleDisconnectAsync(e.Reason); } } private async ValueTask ConnectionOnDataReceived(DataReceivedEventArgs e) { - try + if (Client == null) { - while (true) + _logger.LogWarning("Client was null."); + return; + } + + while (true) + { + if (e.Message.Position >= e.Message.Length) { - if (e.Message.Position >= e.Message.Length) - { - break; - } + break; + } - var reader = e.Message.ReadMessage(); - var type = e.SendOption switch - { - SendOption.None => MessageType.Unreliable, - SendOption.Reliable => MessageType.Reliable, - _ => throw new NotSupportedException() - }; + var reader = e.Message.ReadMessage(); + var type = e.SendOption switch + { + SendOption.None => MessageType.Unreliable, + SendOption.Reliable => MessageType.Reliable, + _ => throw new NotSupportedException() + }; - using var message = new HazelMessage(reader, type); + using var message = new HazelMessage(reader, type); - await Client.HandleMessageAsync(message); - } - } - catch (Exception ex) - { - _logger.LogError(ex, "Exception caught in client data handler."); + await Client.HandleMessageAsync(message); } } diff --git a/src/Impostor.Server.Hazel/HazelMatchmaker.cs b/src/Impostor.Server.Hazel/HazelMatchmaker.cs index e34f37e..cc647a1 100644 --- a/src/Impostor.Server.Hazel/HazelMatchmaker.cs +++ b/src/Impostor.Server.Hazel/HazelMatchmaker.cs @@ -51,21 +51,14 @@ namespace Impostor.Server.Hazel private async ValueTask OnNewConnection(NewConnectionEventArgs e) { - try - { - // Handshake. - var clientVersion = e.HandshakeData.ReadInt32(); - var name = e.HandshakeData.ReadString(); + // Handshake. + var clientVersion = e.HandshakeData.ReadInt32(); + var name = e.HandshakeData.ReadString(); - var connection = new HazelConnection(e.Connection, _connectionLogger); + var connection = new HazelConnection(e.Connection, _connectionLogger); - // Register client - await _clientManager.RegisterConnectionAsync(connection, name, clientVersion); - } - catch (Exception ex) - { - _logger.LogTrace(ex, "Error in new connection."); - } + // Register client + await _clientManager.RegisterConnectionAsync(connection, name, clientVersion); } public IGameMessageWriter CreateGameMessageWriter(IGame game, MessageType messageType) diff --git a/src/Impostor.Server/Net/Client.cs b/src/Impostor.Server/Net/Client.cs index 42f9c91..e80951e 100644 --- a/src/Impostor.Server/Net/Client.cs +++ b/src/Impostor.Server/Net/Client.cs @@ -9,6 +9,7 @@ using Impostor.Server.Net.Manager; using Impostor.Server.Net.Messages; using Impostor.Shared.Innersloth; using Impostor.Shared.Innersloth.Data; +using Microsoft.Extensions.Logging; using Serilog; using ILogger = Serilog.ILogger; @@ -16,14 +17,14 @@ namespace Impostor.Server.Net { internal class Client : ClientBase { - private static readonly ILogger Logger = Log.ForContext(); - + private readonly ILogger _logger; private readonly IClientManager _clientManager; private readonly IGameManager _gameManager; - public Client(IClientManager clientManager, IGameManager gameManager, string name, IConnection connection) + public Client(ILogger logger, IClientManager clientManager, IGameManager gameManager, string name, IConnection connection) : base(name, connection) { + _logger = logger; _clientManager = clientManager; _gameManager = gameManager; } @@ -34,7 +35,7 @@ namespace Impostor.Server.Net var flag = reader.Tag; - Logger.Verbose("[{0}] Server got {1}.", Id, flag); + _logger.LogTrace("[{0}] Server got {1}.", Id, flag); switch (flag) { @@ -217,7 +218,7 @@ namespace Impostor.Server.Net } default: - Logger.Warning("Server received unknown flag {0}.", flag); + _logger.LogWarning("Server received unknown flag {0}.", flag); break; } @@ -227,7 +228,7 @@ namespace Impostor.Server.Net flag != MessageFlags.EndGame && reader.Position < reader.Length) { - Logger.Warning( + _logger.LogWarning( "Server did not consume all bytes from {0} ({1} < {2}).", flag, reader.Position, @@ -236,7 +237,7 @@ namespace Impostor.Server.Net #endif } - public override async ValueTask HandleDisconnectAsync() + public override async ValueTask HandleDisconnectAsync(string reason) { try { @@ -247,9 +248,10 @@ namespace Impostor.Server.Net } catch (Exception ex) { - Logger.Error(ex, "Exception caught in client disconnection."); + _logger.LogError(ex, "Exception caught in client disconnection."); } + _logger.LogInformation("Client disconnecting, reason: {0}.", reason); _clientManager.Remove(this); } @@ -276,7 +278,7 @@ namespace Impostor.Server.Net return true; } - Logger.Warning("[{0}] Client sent packet only allowed by the host ({1}).", Id, game.HostId); + _logger.LogWarning("[{0}] Client sent packet only allowed by the host ({1}).", Id, game.HostId); return false; } diff --git a/src/Impostor.Server/Net/ClientBase.cs b/src/Impostor.Server/Net/ClientBase.cs index 034ac7f..825acc1 100644 --- a/src/Impostor.Server/Net/ClientBase.cs +++ b/src/Impostor.Server/Net/ClientBase.cs @@ -1,6 +1,7 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.Threading.Tasks; +using Hazel; using Impostor.Server.Net.Messages; namespace Impostor.Server.Net @@ -28,6 +29,6 @@ namespace Impostor.Server.Net public abstract ValueTask HandleMessageAsync(IMessage message); - public abstract ValueTask HandleDisconnectAsync(); + public abstract ValueTask HandleDisconnectAsync(string reason); } } \ No newline at end of file diff --git a/src/Impostor.Server/Net/Manager/ClientManager.cs b/src/Impostor.Server/Net/Manager/ClientManager.cs index bd2233d..a178f77 100644 --- a/src/Impostor.Server/Net/Manager/ClientManager.cs +++ b/src/Impostor.Server/Net/Manager/ClientManager.cs @@ -75,13 +75,13 @@ namespace Impostor.Server.Net.Manager var id = NextId(); client.Id = id; - _logger.LogInformation("Client connected."); + _logger.LogTrace("Client connected."); _clients.TryAdd(id, client); } public void Remove(IClient client) { - _logger.LogInformation("Client disconnected."); + _logger.LogTrace("Client disconnected."); _clients.TryRemove(client.Id, out _); } diff --git a/src/Impostor.Server/Net/Redirector/ClientRedirector.cs b/src/Impostor.Server/Net/Redirector/ClientRedirector.cs index ac5da50..1302363 100644 --- a/src/Impostor.Server/Net/Redirector/ClientRedirector.cs +++ b/src/Impostor.Server/Net/Redirector/ClientRedirector.cs @@ -86,7 +86,7 @@ namespace Impostor.Server.Net.Redirector } } - public override ValueTask HandleDisconnectAsync() + public override ValueTask HandleDisconnectAsync(string reason) { _clientManager.Remove(this); return default; diff --git a/submodules/Hazel-Networking b/submodules/Hazel-Networking index de76089..f00245d 160000 --- a/submodules/Hazel-Networking +++ b/submodules/Hazel-Networking @@ -1 +1 @@ -Subproject commit de76089739cc3be4224193348104df028c785449 +Subproject commit f00245df4523dbddd20e09ce52fd3c02cd8cda37 -- 2.39.5