Example #1
0
 private void Data_listOnline_MouseClick(object sender, MouseEventArgs e)
 {
     for (int i = 0; i < Data_listOnline.Items.Count; i++)
     {
         var rectangle = Data_listOnline.GetItemRectangle(i);
         if (rectangle.Contains(e.Location))
         {
             Messenger messenger = new Messenger();
             messenger.AddMessenger(Data_listOnline.Items[i].ToString());
             if (!MessengerContainer.Controls.Equals(messenger))
             {
                 messenger.Dock = DockStyle.Fill;
                 MessengerContainer.Controls.Add(messenger);
             }
             MessengerContainer.Controls[MessengerContainer.Controls.IndexOf(messenger)].BringToFront();
         }
     }
 }
Example #2
0
        void ReceiveData(IAsyncResult iar)
        {
            Socket remote     = (Socket)iar.AsyncState;
            int    recv       = remote.EndReceive(iar);
            string stringData = Encoding.UTF8.GetString(data, 0, recv);

            string[] messagerstring = stringData.Split(':');
            //Xữ lý khi nhận packet online
            if (messagerstring[0].Equals("Connect"))
            {
                if (!Data_listOnline.Items.Contains(messagerstring[1]))
                {
                    Data_listOnline.Invoke(new Action(() => Data_listOnline.Items.Add(messagerstring[1])));
                }
            }
            else
            {
                //xữ lý online client offline
                if (messagerstring[0].Equals("Disconnect"))
                {
                    if (Data_listOnline.Items.Contains(messagerstring[1]))
                    {
                        Data_listOnline.Invoke(new Action(() => Data_listOnline.Items.Remove(messagerstring[1])));
                    }
                }
                else
                //Xữ lý nếu gói nhận được là file
                if (messagerstring[0].Trim().Equals("f"))
                {
                    string packetsend = Encoding.UTF8.GetString(data, 0, 200);
                    messagerstring = packetsend.Split(':');
                    //Kiểm tra UI Messenger của người nhận tồn lại chưa
                    int i = 0;
                    for (i = 0; i < MessengerContainer.Controls.Count; i++)
                    {
                        if (MessengerContainer.Controls[i].ToString().Equals(messagerstring[1]))
                        {
                            break;
                        }
                    }
                    //Nếu chưa tồn tại tạo UI
                    Messenger messenger = new Messenger();
                    messenger.AddMessenger(messagerstring[1]);
                    if (i == MessengerContainer.Controls.Count)
                    {
                        messenger.Dock = DockStyle.Fill;
                        MessengerContainer.Invoke(new Action(() => MessengerContainer.Controls.Add(messenger)));
                    }
                    int          fNameLen = BitConverter.ToInt32(data, 200);
                    string       fName    = Encoding.UTF8.GetString(data, 204, fNameLen);
                    BinaryWriter write    = new BinaryWriter(File.Open(path + "/" + fName, FileMode.Append));
                    write.Write(data, 204 + fNameLen, recv - 204 - fNameLen);
                    write.Close();
                    //Tạo Recivied UI để hiển thị tin nhắn được nhận
                    foreach (Messenger c in MessengerContainer.Controls)
                    {
                        if (messenger.Equals(c))
                        {
                            //Tùy chỉnh hiển thị file
                            string type = fName.Substring(fName.LastIndexOf(".") + 1);
                            type = type.ToLower();
                            //Nếu là hình
                            if (type.Equals("png") || type.Equals("jpeg") || type.Equals("jpg") || type.Equals("gif"))
                            {
                                c.SetRecividePic(path, fName);
                            }
                            else
                            {
                                c.SetRecivideFile(messagerstring[1], fName, path);
                            }
                            break;
                        }
                    }
                }
                else
                {
                    //Xữ lý nếu gói nhận được là messger
                    string messagerfull = stringData.Substring(messagerstring[1].Length + 1 + messagerstring[2].Length + 1 + 2);
                    if (messagerstring[2].Equals("Public"))
                    {
                        Messenger messenger = new Messenger();
                        messenger.AddMessenger("Public");
                        foreach (Messenger c in MessengerContainer.Controls)
                        {
                            if (messenger.Equals(c))
                            {
                                c.SetRecivide(messagerstring[1], messagerfull);
                                break;
                            }
                        }
                    }
                    else
                    {
                        //Kiểm tra UI Messenger của người nhận tồn lại chưa
                        int i = 0;
                        for (i = 0; i < MessengerContainer.Controls.Count; i++)
                        {
                            if (MessengerContainer.Controls[i].ToString().Equals(messagerstring[1]))
                            {
                                break;
                            }
                        }
                        //Nếu chưa tồn tại tạo UI
                        Messenger messenger = new Messenger();
                        messenger.AddMessenger(messagerstring[1]);
                        if (i == MessengerContainer.Controls.Count)
                        {
                            messenger.Dock = DockStyle.Fill;
                            MessengerContainer.Invoke(new Action(() => MessengerContainer.Controls.Add(messenger)));
                        }
                        //Tạo Recivied UI để hiển thị tin nhắn được nhận
                        foreach (Messenger c in MessengerContainer.Controls)
                        {
                            if (messenger.Equals(c))
                            {
                                c.SetRecivide(messagerstring[1], messagerfull);
                                break;
                            }
                        }
                    }
                }
            }
            //Tiếp tục nhận tin nhắn từ client
            remote.BeginReceive(data, 0, size, SocketFlags.None, new AsyncCallback(ReceiveData), remote);
        }