private async Task HandleWrongCredentials(string returnMessage, Socket handler, string sender) { DisconnectionPackage userTakenPacket = new DisconnectionPackage(sender, returnMessage); await TrySendObject(userTakenPacket, handler); handler.Shutdown(SocketShutdown.Both); handler.Close(); }
public async void AcceptCallback(IAsyncResult ar) { Socket handler = null; if (IsRunning != false) { allDone.Set(); //signals main thread to continue Socket listener = (Socket)ar.AsyncState; handler = listener.EndAccept(ar); // accepts connection and lets the handler socket deal with communications } else { allDone.Set(); return; } var ConnectionPacket = tryReadObject(handler); if (ConnectionPacket is ConnectionPackage packet) { if (!connectedClients.Keys.Contains(packet.sender)) { connectedClients[packet.sender] = packet.userId; Client newClient = new Client() { id = packet.userId, Username = packet.sender }; newClient.socket = handler; connections.Add(newClient); await newClient.sendMessage("You have been Connected!"); Task.Run(() => receiveMessagesTask(newClient.socket)); Task.Run(() => UpdateUsersTask(newClient.socket)); } else { DisconnectionPackage userTakenPacket = new DisconnectionPackage(packet.sender, "Username Taken"); await TrySendObject(userTakenPacket, handler); handler.Shutdown(SocketShutdown.Both); handler.Close(); } } else { return; } }
public async Task StopServer() { if (this.IsRunning == true) { this.IsRunning = false; foreach (var client in connections) { DisconnectionPackage stopServerPackage = new DisconnectionPackage(client.Username, "Server has been closed"); await TrySendObject(stopServerPackage, client.socket); } connectedClients.Clear(); connections.Clear(); this.socket.Close(); //this.socket = null; } }
public void StopServer() { if (this.IsRunning == true) { this.IsRunning = false; foreach (var client in connections) { lock (client) { DisconnectionPackage stopServerPackage = new DisconnectionPackage(client.Username, "Server has been closed"); TrySendObject(stopServerPackage, client.socket); client.socket.Shutdown(SocketShutdown.Both); client.socket.Close(); } } connectedClients.Clear(); connections.Clear(); this.socket.Close(); //this.socket = null; } }