private bool TryAcceptClient(ISServerSocket client) { try { clientMan.AddClient(client); return(true); } catch (Exception ex) { if (ex is ClientManager.DuplicateGuidException) { ISLogger.Write("client {0} declined: {1}", client.ClientName, "Duplicate GUID"); } else if (ex is ClientManager.DuplicateNameException) { ISLogger.Write("client {0} declined: {1}", client.ClientName, "Duplicate name"); } else if (ex is ClientManager.DuplicateNameException) { ISLogger.Write("client {0} declined: {1}", client.ClientName, "client limit reached"); } client.DeclineClient(ISServerSocket.ClientDeclinedReason.DuplicateName); //todo - possible race condition here? messages need to be sent before the client is disposed client.Dispose(); return(false); } }
private void HandleClientDisconnect(ISServerSocket client) { if (inputController.CurrentInputClient == client) { inputController.SetInputClient(ISServerSocket.Localhost); } clientMan.RemoveClient(client); ISLogger.Write("Client {0} lost connection", client.ClientName); //Remove the clients hotkey if it exists if (inputMan.GetClientHotkey(client.ClientId) != null) { inputMan.RemoveClientHotkey(client.ClientId); } ClientDisconnected?.Invoke(this, new ISClientInfoModel(client, clientMan)); client.Dispose(); }