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();
    }
Esempio n. 2
0
    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;
        }
    }
Esempio n. 4
0
    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;
        }
    }