public static void ConnectClient(NetConnection newClientConnection) { var newClientObject = new ClientStructure(newClientConnection); LmpPluginHandler.FireOnClientConnect(newClientObject); ServerContext.Clients.TryAdd(newClientObject.Endpoint, newClientObject); LunaLog.Debug($"Online Players: {ServerContext.PlayerCount}, connected: {ServerContext.Clients.Count}"); }
public static void DisconnectClient(ClientStructure client, string reason = "") { if (!string.IsNullOrEmpty(reason)) { LunaLog.Debug($"{client.PlayerName} sent Connection end message, reason: {reason}"); } VesselUpdateRelaySystem.RemovePlayer(client); //Remove Clients from list if (ServerContext.Clients.ContainsKey(client.Endpoint)) { ServerContext.Clients.TryRemove(client.Endpoint, out client); LunaLog.Debug($"Online Players: {ServerContext.PlayerCount}, connected: {ServerContext.Clients.Count}"); } if (client.ConnectionStatus != ConnectionStatus.Disconnected) { client.ConnectionStatus = ConnectionStatus.Disconnected; LmpPluginHandler.FireOnClientDisconnect(client); if (client.Authenticated) { ChatSystem.RemovePlayer(client.PlayerName); var msgData = ServerContext.ServerMessageFactory.CreateNewMessageData <PlayerConnectionLeaveMsgData>(); msgData.PlayerName = client.PlayerName; MessageQueuer.RelayMessage <PlayerConnectionSrvMsg>(client, msgData); LockSystem.ReleasePlayerLocks(client); if (!ServerContext.Clients.Any(c => c.Value.Subspace == client.Subspace)) { WarpSystem.RemoveSubspace(client.Subspace); VesselRelaySystem.RemoveSubspace(client.Subspace); } } try { client.Connection?.Disconnect(reason); } catch (Exception e) { LunaLog.Debug($"Error closing client Connection: {e.Message}"); } ServerContext.LastPlayerActivity = ServerContext.ServerClock.ElapsedMilliseconds; } }
public static void DisconnectClient(ClientStructure client, string reason = "") { if (!string.IsNullOrEmpty(reason)) { LunaLog.Debug($"{client.PlayerName} sent Connection end message, reason: {reason}"); } if (client.ConnectionStatus != ConnectionStatus.Disconnected) { client.ConnectionStatus = ConnectionStatus.Disconnected; LmpPluginHandler.FireOnClientDisconnect(client); if (client.Authenticated) { var msgData = ServerContext.ServerMessageFactory.CreateNewMessageData <PlayerConnectionLeaveMsgData>(); msgData.PlayerName = client.PlayerName; MessageQueuer.RelayMessage <PlayerConnectionSrvMsg>(client, msgData); LockSystem.ReleasePlayerLocks(client); WarpSystem.RemoveSubspace(client.Subspace); } try { client.Connection?.Disconnect(reason); } catch (Exception e) { LunaLog.Error($"Error closing client Connection: {e.Message}"); } } //Remove Clients from list if (ServerContext.Clients.TryRemove(client.Endpoint, out ClientStructure removed)) { LunaLog.Debug($"Online Players: {ServerContext.PlayerCount}, connected: {ServerContext.Clients.Count}"); } else { LunaLog.Error($"Error removing client: {client.PlayerName} from list"); } //As this is the last client that is connected to the server, run a safety backup once he disconnects if (ServerContext.Clients.Count == 0) { BackupSystem.RunBackup(); GcSystem.PerformGCNow(); } }
public static void HandleDisconnectException(string location, ClientStructure client, Exception e) { if (!client.DisconnectClient && client.ConnectionStatus != ConnectionStatus.Disconnected) { if (e.InnerException != null) { LunaLog.Normal($"Client {client.PlayerName} disconnected in {location}, Endpoint {client.Endpoint}, " + $"error: {e.Message} ({e.InnerException.Message})"); } else { LunaLog.Normal($"Client {client.PlayerName} disconnected in {location}, Endpoint {client.Endpoint}, " + $"error: {e.Message}"); } } ClientConnectionHandler.DisconnectClient(client); }
public static bool ClientConnected(ClientStructure client) { return(ServerContext.Clients.ContainsKey(client.Endpoint)); }