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(); } } }
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); }