diff --git a/Libraries/Core/Servers/WebSocketServer.cs b/Libraries/Core/Servers/WebSocketServer.cs index 794ec638..538fb08d 100644 --- a/Libraries/Core/Servers/WebSocketServer.cs +++ b/Libraries/Core/Servers/WebSocketServer.cs @@ -34,7 +34,10 @@ public class WebSocketServer( foreach (var wsh in socketHandlers) { wsh.OnConnection(webSocket, context).Wait(); - _logger.Info($"WebSocketHandler \"{wsh.GetSocketId()}\" connected"); + if (webSocket.State == WebSocketState.Open) + { + _logger.Info($"WebSocketHandler \"{wsh.GetSocketId()}\" connected"); + } } return Task.CompletedTask; diff --git a/Libraries/Core/Servers/Ws/SptWebSocketConnectionHandler.cs b/Libraries/Core/Servers/Ws/SptWebSocketConnectionHandler.cs index 560ff776..4708600c 100644 --- a/Libraries/Core/Servers/Ws/SptWebSocketConnectionHandler.cs +++ b/Libraries/Core/Servers/Ws/SptWebSocketConnectionHandler.cs @@ -145,13 +145,23 @@ public class SptWebSocketConnectionHandler( sptWebSocketMessageHandler.OnSptMessage(sessionID, ws, readBytes.ToArray()).Wait(); } } - catch (OperationCanceledException e) + catch (OperationCanceledException _) { _logger.Info("WebSocket disconnecting, receive task finalized..."); } - catch (Exception e) + catch(Exception _) { - _logger.Error("Error reading data from WebSocket", e); + lock (_lockObject) + { + _sockets.Remove(sessionID); + _socketAliveTimers.Remove(sessionID); + _receiveTasks.Remove(sessionID); + var playerProfile = _profileHelper.GetFullProfile(sessionID); + var playerInfoText = $"{playerProfile.ProfileInfo.Username} ({sessionID})"; + _logger.Info($"[ws] player: {playerInfoText} has disconnected"); + } + + ws.CloseAsync(WebSocketCloseStatus.NormalClosure, "Client closed connection", CancellationToken.None); } finally {