protected override void HandleClient(ClientDialog client)
        {
            try
            {
                while (true)
                {
                    Message request = client.ReceiveMessage();
                    switch (request.Title)
                    {
                    case "AUTHENTICATE":
                        if (UserConfiguration.LoginDataMatch((LoginUserData)request.Payload["LoginData"]))
                        {
                            client.Username = ((LoginUserData)request.Payload["LoginData"]).Username;
                        }
                        break;

                    case "MESSAGE":
                        string[]       receivers_usernames = (string[])request.Payload["Receivers"];
                        ClientDialog[] receivers           = new ClientDialog[receivers_usernames.Length];
                        for (int i = 0; i < receivers.Length; i++)
                        {
                            for (int j = 0; j < this.clients.Count; j++)
                            {
                                if (receivers_usernames[i] == this.clients[j].Username)
                                {
                                    this.clients[j].SendMessage("MESSAGE", ("Sender", client.Username), ("Content", request.Payload["Message"]));
                                }
                            }
                        }
                        break;

                    case "EXPECT":
                    /*if (this.expectant == null) this.expectant = client;
                     * else
                     * {
                     *  this.expectant.SendMessage("MESSAGE", ("Sender", client.Username), ("Content", request.Payload["Message"]));
                     *  this.expectant = null;
                     * }
                     * break;*/

                    case "UNEXPECT":
                        //if (this.expectant == client) this.expectant = null;
                        break;

                    case "DISCONNECT":
                        client.Dispose();
                        throw new SocketException();
                    }
                }
            }
            catch (SocketException) {
                this.clients.Remove(client);
            }
        }
Beispiel #2
0
        protected override void HandleClient(ClientDialog client)
        {
            IPEndPoint remoteIPEndPoint = client.Socket.RemoteEndPoint as IPEndPoint;

            Console.WriteLine($"Connection request from {client.IPEndPoint.Address}:{client.IPEndPoint.Port} has been accepted");
            UserConfiguration userConfiguration = new UserConfiguration(client);

            try
            {
                while (true)
                {
                    Message request = client.ReceiveMessage();
                    switch (request.Title)
                    {
                    case "SIGNUP":
                        userConfiguration.SignUp((EditableUserData)request.Payload["EditableData"]);
                        break;

                    case "LOGIN":
                        userConfiguration.LogIn((LoginUserData)request.Payload["LoginData"]);
                        break;

                    case "DISCONNECT":
                        client.Dispose();
                        throw new SocketException();
                    }
                }
            }
            catch (Exception ex) when(ex is SocketException || ex is NullReferenceException)
            {
                if (client.Authenticated)
                {
                    userConfiguration.MarkOffline();
                }
                this.clients.Remove(client);
                Console.WriteLine($"{client.IPEndPoint.Address}:{client.IPEndPoint.Port} disconnected");
            }
        }