Пример #1
0
        // прослушивание входящих подключений
        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();
            }
        }
Пример #2
0
        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();
            }
        }
Пример #3
0
        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";
                });
            }
        }