/// <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(); } }