// прослушивание входящих подключений public async void Listen(SendMessageToTextBox sendMessage) { try { tcpListener = new TcpListener(IPAddress.Any, 8888); tcpListener.Start(); Console.OutputEncoding = System.Text.Encoding.UTF8; // if there is a problems with russians characters sendMessage("Сервер запущен. Ожидание подключений..."); while (true) { TcpClient tcpClient = tcpListener.AcceptTcpClient(); ClientObject clientObject = new ClientObject(tcpClient, this); //Thread clientThread = new Thread(new ThreadStart(clientObject.Process(send))); //clientThread.Start(); //await Task.Factory.StartNew(() => clientObject.Process()); } } catch (Exception ex) { sendMessage(ex.Message); Disconnect(); } }
public void Process(SendMessageToTextBox sendMessage) { try { Console.OutputEncoding = System.Text.Encoding.UTF8; Stream = client.GetStream(); // получаем имя пользователя string message = GetMessage(); userName = message; message = userName + " вошел в чат"; // посылаем сообщение о входе в чат всем подключенным пользователям server.BroadcastMessage(message, this.Id); sendMessage(message); // в бесконечном цикле получаем сообщения от клиента while (true) { try { message = GetMessage(); message = String.Format("{0}: {1}", userName, message); sendMessage(message); server.BroadcastMessage(message, this.Id); } catch { message = String.Format("{0}: покинул чат", userName); sendMessage(message); server.BroadcastMessage(message, this.Id); break; } } } catch (Exception e) { sendMessage(e.Message); } finally { // в случае выхода из цикла закрываем ресурсы server.RemoveConnection(this.Id); Close(); } }
private async void btn_ChatServer_Click(object sender, RoutedEventArgs e) { btn_ChatServer.IsEnabled = false; SendMessageToTextBox send = MessageToTextbox; try { server = new ServerObject(); //server.Listen(send); //listenThread = new Thread(new ThreadStart(server.Listen(send))); //listenThread.Start(); //старт потока await Task.Factory.StartNew(() => server.Listen(send)); } catch (Exception ex) { server.Disconnect(); Dispatcher.Invoke(() => { txt_GeneralChat.Text += ex.Message + "\n"; }); } }