Пример #1
0
        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);
        }
Пример #2
0
        //群聊图片文件信息解析
        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);
                    }));
                }
            }
        }
Пример #3
0
        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");
        }
Пример #4
0
        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");
        }
Пример #5
0
 public void addMessage(imageFileMessage message)
 {
     messageList.Add(message);//添加到数组末尾
 }
Пример #6
0
        //单聊图片文件信息解析
        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);
                        }));
                    }
                }
            }
        }