예제 #1
0
 public void WriteMessage(string message, string additional = "") //метод для отправки сообщения
 {
     try
     {
         string finalMessage = "";
         if (additional == "")
         {
             finalMessage = message;
         }
         else
         {
             finalMessage = message + "$" + additional + "$" + Name;
         }
         byte[] toSend  = Encoding.Unicode.GetBytes(finalMessage);
         int    numSend = 0;
         while (numSend != toSend.Length)
         {
             numSend = UDP.Send(toSend, toSend.Length, GroupStringIP, GroupPort);
         }
     }
     catch (Exception e)
     {
         Outputter.PrintException(e);
         Outputter.PrintWarning("\nНе удалось отправить сообщение.");
     }
 }
예제 #2
0
        private void AuthorizeBtn_Click(object sender, EventArgs e) //по нажатию на кнопку авторизации
        {
            string inputName = AuthorizeBox.Text;

            if (inputName.Length < 4)
            {
                Outputter.PrintWarning("Имя слишком короткое.");
                return;
            }
            Client = new User(inputName, this);
            Outputter.PrintWarning("Ты вошел в чат!");
            ChangeEnabled(true);
            AuthorizeBox.ReadOnly = true;
            AuthorizeBtn.Enabled  = false;
        }
예제 #3
0
        private void ListenToMessages() //метод для прослушки сообщений
        {
            try
            {
                while (true)
                {
                    IPEndPoint remoteIP        = null;
                    byte[]     byteMessage     = UDP.Receive(ref remoteIP);
                    string[]   receivedMessage = Encoding.Unicode.GetString(byteMessage).Split('$');

                    Form.Invoke(new MethodInvoker(() =>
                    {
                        if (receivedMessage[0] != "нет")
                        {
                            Outputter.PrintMessage(receivedMessage[0]);
                        }
                        if (receivedMessage.Length > 1)
                        {
                            if (receivedMessage[1] == "покинул")
                            {
                                Outputter.RemoveUser(receivedMessage[2]);
                            }
                            else if (receivedMessage[1] == "присоединился")
                            {
                                Outputter.AddUser(receivedMessage[2]);
                                WriteMessage("нет", "подключен");
                            }
                            else if (receivedMessage[1] == "подключен")
                            {
                                if (receivedMessage[2] != Name)
                                {
                                    Outputter.AddUser(receivedMessage[2]);
                                }
                            }
                        }
                    }));
                }
            }
            catch (Exception e)
            {
                Form.Invoke(new MethodInvoker(() =>
                {
                    Outputter.PrintException(e);
                    Outputter.PrintWarning("\nКлиент перестал получать сообщения. Вам придется перезагрузить программу.");
                }));
            }
        }
예제 #4
0
 public User(string NickName, MainForm _form) //конструктор юзера
 {
     try
     {
         Name = NickName;
         Form = _form;
         UDP  = new UdpClient(GroupPort);
         UDP.JoinMulticastGroup(GroupIP, 50);
         ListeningTask = new Task(ListenToMessages);
         ListeningTask.Start();
         WriteMessage(Name + " присоединился к чату", "присоединился");
     }
     catch (Exception e)
     {
         Outputter.PrintException(e);
     }
 }
예제 #5
0
 private void MainForm_Load(object sender, EventArgs e) //метод, возникающий при загрузке формы
 {
     ChangeEnabled(false);
     Outputter.PrintWarning("Введи никнейм. В целях конспирации мы крайне не рекомендуем указывать настоящее имя.");
 }