Ejemplo n.º 1
0
        /// <summary>
        /// В методе Process реализован простой протокол для обмена сообщениями с клиентом.
        /// Так, как в начале получаем имя подключенного пользователя, а затем, в цикле получаем все остальные сообщения.
        /// Для трансляции сообщений всем пользователям используется метод BroadcastMessage() класса ServerObject.
        /// </summary>
        public void Process()
        {
            try
            {
                // загружаем список доступных команд
                server.AddListTeams();

                Stream = client.GetStream();
                // получаем имя пользователя
                string message = GetMessage();
                userName = message;
                server.AddUserName(message);
                message = userName + " вошел в чат";
                // посылаем сообщение о входе в чат всем подключенным пользователям
                server.BroadcastMessage(message, this.Id);
                Console.WriteLine(message);
                // в бесконечном цикле получаем сообщения от клиента
                while (true)
                {
                    try
                    {
                        message = GetMessage();

                        if (message != "")
                        {
                            switch (message)
                            {
                            case "#Список доступных команд":
                                message = String.Format("{0}: {1}", "#BOT", server.DataBaseTeams());
                                Console.WriteLine(message);
                                server.MessageToSender(message, this.Id);
                                break;

                            case "#Список пользователей":
                                message = String.Format("{0}: {1}", "#BOT", server.DataBaseClients());
                                Console.WriteLine(message);
                                server.MessageToSender(message, this.Id);
                                break;

                            case "#Завершить чат":
                                Console.WriteLine(message);
                                server.RemoveConnection(this.Id);
                                Close();
                                break;

                            default:
                                message = String.Format("{0}: {1}", userName, message);
                                Console.WriteLine(message);
                                server.BroadcastMessage(message, this.Id);
                                break;
                            }
                        }
                    }
                    catch
                    {
                        message = String.Format("{0}: покинул чат", userName);
                        server.RemoveUserName(userName);
                        Console.WriteLine(message);
                        server.BroadcastMessage(message, this.Id);
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                // в случае выхода из цикла закрываем ресурсы
                server.RemoveConnection(this.Id);
                Close();
            }
        }