Ejemplo n.º 1
0
        public void Process()
        {
            try
            {
                Stream = client.GetStream();
                // получаем имя пользователя
                string message = GetMessage();
                while (!server.IsValidUsername(message))
                {
                    server.SendMessageToId("invalidlogin|", Id);
                    message = GetMessage();
                }
                userName = message;
                server.SendMessageTo("successeslogin|", UserName);
                server.BroadcastUserlist();

                message = $"msg|{userName} вошел в чат|";
                // посылаем сообщение о входе в чат всем подключенным пользователям
                server.BroadcastMessage(message);
                server.PrintMessage(message);
                // в бесконечном цикле получаем сообщения от клиента
                while (true)
                {
                    try
                    {
                        message = GetMessage();
                        if (message[0] == '@')
                        {
                            var receiver = new string(message.Skip(1).TakeWhile(x => x != ' ').ToArray());
                            message = new string(message.Skip(receiver.Length + 1).ToArray());
                            message = $"msg|[{userName}] -> [{receiver}] :{message}|";
                            server.PrintMessage(message);
                            server.SendMessageTo(message, userName);
                            if (!server.SendMessageTo(message, receiver))
                            {
                                server.SendMessageTo("msg| Пользователь не найден.|", userName);
                            }
                        }
                        else if (message.Contains("#userdisconnect"))
                        {
                            server.RemoveConnection(Id);
                            Close();
                        }
                        else
                        {
                            message = $"msg|{userName}: {message}|";
                            server.PrintMessage(message);
                            server.BroadcastMessage(message);
                        }
                    }
                    catch
                    {
                        message = String.Format("msg|{0}: покинул чат|", userName);
                        server.PrintMessage(message);
                        server.BroadcastMessage(message);
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                server.PrintMessage(e.Message);
            }
            finally
            {
                // в случае выхода из цикла закрываем ресурсы
                server.RemoveConnection(this.Id);
                Close();
            }
        }