public void SendBigFile(string filePath, int uID, List <int> targetID, string fileType) { Socket socketSend = cSockets[0]; string fileName = "null"; try { //读取选择的文件 using (FileStream fsRead = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Read)) { //1. 第一步:发送一个包,表示文件的长度,让客户端知道后续要接收几个包来重新组织成一个文件 long length = fsRead.Length; fileName = filePath.Substring(filePath.LastIndexOf('\\') + 1); ArrayList fileInfo = new ArrayList() { length, uID, targetID, fileName }; command c1 = new command() { data = fileInfo, type = 1, subType = fileType, res = "yes" }; string sendStr = JsonConvert.SerializeObject(c1); sendSysMsg(sendStr, 1); //2. 第二步:每次发送一个1MB的包,如果文件较大,则会拆分为多个包 byte[] buffer = new byte[1024 * 1024]; long send = 0; //发送的字节数 while (true) //大文件断点多次传输 { int r = fsRead.Read(buffer, 0, buffer.Length); if (r == 0) { break; } socketSend.Send(buffer, 0, r, SocketFlags.None); send += r; } //删除文件 } } catch { Console.WriteLine("收发文件错误!"); } imageFileMessage message = new imageFileMessage(); message.target = (int)(publicClass.s1.targetUserID); message.sendUser = publicClass.mainUser.id; message.sendTime = DateTime.Now; message.fileName = filePath; publicClass.s1.showImageFileMessage(message); }
//群聊图片文件信息解析 public static void decodeGroupIFMessageDraw(command cComand) { JObject data = (JObject)cComand.data; //转化为Jobject imageFileMessage message = data["msg"].ToObject <imageFileMessage>(); //获取消息类 foreach (group i in groupList) { if (i.id == message.target) { i.addMessage(message); } } if (g1 == null) { m1.Invoke(new Action(() => { m1.userHeadTwinkle((uint)message.sendUser, 1); })); } else if (g1.groupID != (uint)message.target) { m1.Invoke(new Action(() => { m1.userHeadTwinkle((uint)message.sendUser, 1); })); } else if (g1.groupID == (uint)message.target) { if (g1.IsDisposed) { m1.Invoke(new Action(() => { m1.userHeadTwinkle((uint)message.sendUser, 1); })); } else { g1.Invoke(new Action(() => { g1.AddMessage(message); })); } } }
public void AddMessage(imageFileMessage message) { groupChatMessageBox.SelectionFont = new Font("黑体", 9, FontStyle.Bold); groupChatMessageBox.SelectionColor = System.Drawing.Color.Purple; groupChatMessageBox.SelectionIndent = 2; groupChatMessageBox.SelectionBullet = true; groupChatMessageBox.AppendText(publicClass.onlineUserList.Find(s => s.id == message.sendUser).userName + " [" + message.sendTime + "]\r\n"); groupChatMessageBox.SelectionFont = new Font("宋体", 9, FontStyle.Regular); groupChatMessageBox.SelectionColor = System.Drawing.Color.Blue; groupChatMessageBox.SelectionIndent = 19; groupChatMessageBox.SelectionBullet = false; Clipboard.Clear(); //清空剪贴板 Bitmap bmp = new Bitmap(message.fileName); //创建Bitmap类对象 Clipboard.SetImage(bmp); //将Bitmap类对象写入剪贴板 groupChatMessageBox.Paste(); //将剪贴板中的对象粘贴到RichTextBox1 Clipboard.Clear(); groupChatMessageBox.AppendText("\r\n"); }
public void AddMessage(imageFileMessage message) { singleChatMessageBox.SelectionFont = new Font("黑体", 9, FontStyle.Bold); singleChatMessageBox.SelectionColor = System.Drawing.Color.Purple; singleChatMessageBox.SelectionIndent = 2; singleChatMessageBox.SelectionBullet = true; singleChatMessageBox.AppendText(publicClass.onlineUserList.Find(s => s.id == message.sendUser).userName + " [" + message.sendTime + "]\r\n"); singleChatMessageBox.SelectionFont = new Font("宋体", 9, FontStyle.Regular); singleChatMessageBox.SelectionColor = System.Drawing.Color.Blue; singleChatMessageBox.SelectionIndent = 19; singleChatMessageBox.SelectionBullet = false; //singleChatMessageBox.AppendText("【图片/文件消息 点击查看】\r\n" ); //LinkLabel l1 = new LinkLabel(); //l1.Text = "333"; //singleChatMessageBox.Controls.Add(l1); Clipboard.Clear(); //清空剪贴板 Bitmap bmp = new Bitmap(Application.StartupPath + "\\src\\" + message.fileName); //创建Bitmap类对象 Clipboard.SetImage(bmp); //将Bitmap类对象写入剪贴板 singleChatMessageBox.Paste(); //将剪贴板中的对象粘贴到RichTextBox1 Clipboard.Clear(); singleChatMessageBox.AppendText("\r\n"); }
public void addMessage(imageFileMessage message) { messageList.Add(message);//添加到数组末尾 }
//单聊图片文件信息解析 public static void decodeSingleIFMessageDraw(command cComand) { JArray data = (JArray)cComand.data;//转化为Jobject int uID = data[1].ToObject <int>(); int targetID = data[2].ToObject <int>(); string fileName = data[3].ToString(); imageFileMessage message = new imageFileMessage(); message.fileName = fileName; try { string endfix = fileName.Substring(fileName.IndexOf('.') + 1); if (endfix == "jpg" | endfix == "jpeg" | endfix == "png" | endfix == "gif") { message.fileType = "img";//图片类型 } } catch { message.fileType = "file";//文件类型 } message.sendUser = uID; message.sendTime = DateTime.Now; if (!myChat.ContainsKey(message.sendUser)) { singleChatSession chatSession = new singleChatSession(message.sendUser); chatSession.addMessage(message); myChat.Add(message.sendUser, chatSession); if (s1 == null) { m1.Invoke(new Action(() => { m1.userHeadTwinkle((uint)message.sendUser, 0); })); } else if (s1.targetUserID != (uint)message.sendUser) { m1.Invoke(new Action(() => { m1.userHeadTwinkle((uint)message.sendUser, 0); })); } else if (s1.targetUserID == (uint)message.sendUser) { if (s1.IsDisposed) { m1.Invoke(new Action(() => { m1.userHeadTwinkle((uint)message.sendUser, 0); })); } else { s1.Invoke(new Action(() => { s1.AddMessage(message); })); } } } else { myChat[message.sendUser].addMessage(message); if (s1 == null) { m1.Invoke(new Action(() => { m1.userHeadTwinkle((uint)message.sendUser, 0); })); } else if (s1.targetUserID != (uint)message.sendUser) { m1.Invoke(new Action(() => { m1.userHeadTwinkle((uint)message.sendUser, 0); })); } else if (s1.targetUserID == (uint)message.sendUser) { if (s1.IsDisposed) { m1.Invoke(new Action(() => { m1.userHeadTwinkle((uint)message.sendUser, 0); })); } else { s1.Invoke(new Action(() => { s1.AddMessage(message); })); } } } }