Exemple #1
0
 private void OnServer_OnValueChange(object sender, EventArgs e)
 {
     if (OnServer.Value == true)
     {
         player = 1;
         // Считываем IP-адреса сервера из  TextBox
         IPAddress ipAddr = IPAddress.Parse(txtIp.Text);
         port = Convert.ToInt32(Port.Text);
         //Создаем новый экземпляр объекта ChatServer
         ChatServer mainServer = new ChatServer(ipAddr, port);
         // Подключаем обработчик событий StatusChanged к mainServer_StatusChanged
         ChatServer.StatusChanged += new StatusChangedEventHandler(mainServer_StatusChanged);
         //Начинаем  прослушивать соединения
         mainServer.StartListening();
         // Show that we started to listen for connections
         // txtLog.AppendText("Monitoring for connections...\r\n");
     }
 }
        // Происходит, когда принимается новый клиент
        private void AcceptClient()
        {
            srReceiver = new System.IO.StreamReader(tcpClient.GetStream());
            swSender   = new System.IO.StreamWriter(tcpClient.GetStream());

            // Читаем информацию о счете от клиента
            currUser = srReceiver.ReadLine();

            // Мы получили ответ от клиента
            if (currUser != "")
            {
                // Сохраняем имя пользователя в хэш-таблице
                if (ChatServer.htUsers.Contains(currUser) == true)
                {
                    // 0 означает не подключен
                    swSender.WriteLine("0|Это имя пользователя уже существует.");
                    swSender.Flush();
                    CloseConnection();
                    return;
                }
                else if (currUser == "Administrator")
                {
                    // 0 означает не подключен
                    swSender.WriteLine("0|Это имя пользователя зарезервировано.");
                    swSender.Flush();
                    CloseConnection();
                    return;
                }
                else
                {
                    // 1 означает успешное подключение
                    swSender.WriteLine("1");
                    swSender.Flush();

                    // Добавьте пользователя в хэш-таблицы и начните прослушивать сообщения от него
                    ChatServer.AddUser(tcpClient, currUser);
                }
            }
            else
            {
                CloseConnection();
                return;
            }

            try
            {
                // Продолжаем ждать сообщения от пользователя
                while ((strResponse = srReceiver.ReadLine()) != "")
                {
                    // Если он недействителен, удаляем пользователя
                    if (strResponse == null)
                    {
                        ChatServer.RemoveUser(tcpClient);
                    }
                    else
                    {
                        string[] str = strResponse.Split(' ');
                        if (str[0] != "mov" && str[0] != "Delet")
                        {
                            // В противном случае отправляем сообщение всем остальным пользователям
                            ChatServer.SendMessage(currUser, strResponse);
                        }
                        else
                        {
                            ChatServer.SendMessageMap(currUser, strResponse);
                        }
                    }
                }
            }
            catch
            {
                // Если что-то пошло не так с этим пользователем, отключите его
                ChatServer.RemoveUser(tcpClient);
            }
        }