public FileSendBufferEventArgs(
     SendFileManager sendFileManager,
     int size)
     : base()
 {
     _sendFileManager = sendFileManager;
     _size = size;
 }
 public FileSendEventArgs(SendFileManager sendFileManager)
     : base()
 {
     _sendFileManager = sendFileManager;
 }
        //public void SendFile(string fileName)
        //{
        //    SendFileManager sendFileManager = new SendFileManager(fileName);
        //    if (SendFileManagerList.ContainsKey(sendFileManager.MD5))
        //    {
        //        throw new Exception(string.Format(
        //            "文件 {0} 正在发送,不能发送重复的文件。",
        //            fileName));
        //    }
        //    else
        //    {
        //        SendFileManagerList.Add(sendFileManager.MD5, sendFileManager);
        //        sendFileManager.ReadFileBuffer += new ReadFileBufferEventHandler(
        //            SendFileManageReadFileBuffer);
        //        TraFransfersFileStart ts = new TraFransfersFileStart(
        //            sendFileManager.MD5,
        //            sendFileManager.Name,
        //            Icon.ExtractAssociatedIcon(fileName).ToBitmap(),
        //            sendFileManager.Length,
        //            sendFileManager.PartCount,
        //            sendFileManager.PartSize);
        //        Send((int)Command.RequestSendFile, ts);
        //    }
        //}
        public void SendFile(SendFileManager sendFileManager, Image image)
        {
            if (SendFileManagerList.ContainsKey(sendFileManager.MD5))
            {
                throw new Exception(string.Format(
                    "文件 {0} 正在发送,不能发送重复的文件。",
                    sendFileManager.FileName));
            }
            else
            {
                SendFileManagerList.Add(sendFileManager.MD5, sendFileManager);
                sendFileManager.ReadFileBuffer += new ReadFileBufferEventHandler(
                    SendFileManageReadFileBuffer);

                TraFransfersFileStart ts = new TraFransfersFileStart(
                    sendFileManager.MD5,
                    sendFileManager.Name,
                    image,
                    sendFileManager.Length,
                    sendFileManager.PartCount,
                    sendFileManager.PartSize);
                Send((int)Command.RequestSendFile, ts);
                //文件接收超时管理
                if (SendFileOutTimer.Enabled == false)
                {
                    SendFileOutTimer.Enabled = true;
                }
            }
        }
 public bool CanSend(SendFileManager sendFileManager)
 {
     return !SendFileManagerList.ContainsKey(sendFileManager.MD5);
 }
 private void btn_selectFile_Click(object sender, EventArgs e)
 {
     OpenFileDialog ofd = new OpenFileDialog();
     if (ofd.ShowDialog() == DialogResult.OK)
     {
         try
         {
             SendFileManager sendFileManager = new SendFileManager(
                 ofd.FileName);
             if (udpSendFile.CanSend(sendFileManager))
             {
                 FileTransfersItem item = fileTansfersContainer1.AddItem(
                     sendFileManager.MD5,
                     "发送文件",
                     sendFileManager.Name,
                     Icon.ExtractAssociatedIcon(ofd.FileName).ToBitmap(),
                     sendFileManager.Length,
                     FileTransfersItemStyle.Send);
                 item.CancelButtonClick += new EventHandler(ItemCancelButtonClick1);
                 item.Tag = sendFileManager;
                 sendFileManager.Tag = item;
                 udpSendFile.RemoteEP =new IPEndPoint(IPAddress.Parse(txt_tbRemoteIP.Text), int.Parse(txt_tbRemotePort.Text));
                 udpSendFile.SendFile(sendFileManager, item.Image);
             }
             else
             {
                 MessageBox.Show("文件正在发送,不能发送重复的文件。");
             }
         }
         catch (Exception ex)
         {
             MessageBox.Show(ex.Message);
         }
     }
 }
        /// <summary>
        /// 发送文件
        /// </summary>
        /// <param name="path"></param>
        public void FileSendInitMethod(String path)
        {
            if (InvokeRequired)
            {
                this.Invoke(FileSendInitEvent, path);
            }
            try
            {
                Thread.Sleep(500);
                //用于好友不在线时的离线文件发送重复检测
                foreach (FileTransfersItem item in fileTansfersContainer.Controls)
                {
                    if (item.Tag.GetType().Name == "SendFileManager")
                    {
                        SendFileManager sendSfm = item.Tag as SendFileManager;
                        if (item.Style == FileTransfersItemStyle.Cancel || item.Style == FileTransfersItemStyle.Receive)
                        {
                            if (sendSfm.FileName == path)
                            {
                                MsgBox.Show(this, "CSS&IM", "文件正在发送,不要能重复发送!", MessageBoxButtons.OK);
                                return;
                            }
                        }
                    }
                }

                SendFileManager sendFileManager = new SendFileManager(path, true);
                if (udpSendFile.CanSend(sendFileManager) && (!Util.SendFileManagerList.ContainsKey(sendFileManager.MD5)))
                {

                    FileTransfersItem item = fileTansfersContainer.AddItem(
                        sendFileManager.MD5,
                        "发送文件",
                        sendFileManager.Name,
                        Icon.ExtractAssociatedIcon(path).ToBitmap(),
                        sendFileManager.Length,
                        FileTransfersItemStyle.Send);
                    item.CancelButtonClick += new EventHandler(ItemCancelButtonClick1);
                    item.OffLineFilesButtonClick += new EventHandler(item_OffLineFilesButtonClick);
                    item.Tag = sendFileManager;
                    sendFileManager.Tag = item;
                    //item.FtpSendFile();
                    udpSendFile.RemoteEP = new IPEndPoint(RemotBaseUDPIP, RemotBaseUDPPort);
                    //udpSendFile.SendFile(sendFileManager, item.Image);
                    udpSendFile.SendFile(sendFileManager, item.Image);
                }
                else
                {
                    MsgBox.Show(this, "CSS&IM", "文件正在发送,不要能重复发送!", MessageBoxButtons.OK);
                }

                if (!panel_function.Visible)
                {
                    this.WindowState = FormWindowState.Normal;
                    this.Activate();
                    panel_function.Visible = true;
                    this.Width = this.Width + panel_function.Width;
                    panel_msg.Width = panel_msg.Width - panel_function.Width - 2;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }