using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Net;
using System.Text;
using System.Windows.Forms;
namespace NetWorkHelper
{
public partial class AxUdpClient : Component
{
#region 构造函数
public AxUdpClient()
{
InitializeComponent();
}
public AxUdpClient(IContainer container)
{
container.Add(this);
InitializeComponent();
}
#endregion
#region 变量
private UdpLibrary _udpLibrary;
///
/// 文件发送列表管理器
///
private Dictionary _sendFileManagerList;
///
/// 文件接收列表管理器
///
private Dictionary _receiveFileManagerList;
private object _sendsyncLock = new object();
private object _receivesyncLock = new object();
#endregion
#region 属性
///
/// 传输协议是否启用AxUDPClient内部封装协议
///
[Description("传输协议是否启用AxUDPClient内部封装协议")]
[Category("UDP客户端属性")]
public bool IsAxAgreement { get; set; } = true;
///
/// UDP客户端基类
///
[Description("UDP客户端基类")]
[Category("UDP客户端属性")]
public UdpLibrary UdpLibrary
{
get
{
if (_udpLibrary == null)
{
_udpLibrary = new UdpLibrary(LocalPort);
_udpLibrary.ReceiveData += new ReceiveDataEventHandler(UdpLibraryReceiveData);
}
return _udpLibrary;
}
}
///
/// 文件发送列表管理器
///
[Description("文件发送列表管理器")]
[Category("UDP客户端属性")]
public Dictionary SendFileManagerList
{
get
{
if (_sendFileManagerList == null)
{
_sendFileManagerList = new Dictionary(10);
}
return _sendFileManagerList;
}
}
///
/// 文件接收列表管理器
///
[Description("文件接收列表管理器")]
[Category("UDP客户端属性")]
public Dictionary ReceiveFileManagerList
{
get
{
if (_receiveFileManagerList == null)
{
_receiveFileManagerList = new Dictionary(10);
}
return _receiveFileManagerList;
}
}
///
/// 远程监听IP
///
[Description("远程监听IP")]
[Category("UDP客户端属性")]
public string RemoteIp { get; set; } = "127.0.0.1";
///
/// 远程监听端口
///
[Description("远程监听端口")]
[Category("UDP客户端属性")]
public int RemotePort { get; set; } = 8900;
///
/// 本地监听IP
///
[Description("本地监听IP")]
[Category("UDP客户端属性")]
public int LocalPort { get; set; } = 8899;
///
/// 远程主机网络端点
///
[Description("远程主机网络端点")]
[Category("UDP客户端属性")]
public IPEndPoint RemoteEp
{
get { return new IPEndPoint(IPAddress.Parse(RemoteIp), RemotePort); }
}
public FileTansfersContainer FileTansfersControl
{
get
{
if (fileTansfersContainer == null)
{
fileTansfersContainer = new FileTansfersContainer();
}
return fileTansfersContainer;
}
set
{
if (value == null)
fileTansfersContainer = new FileTansfersContainer();
else
{
fileTansfersContainer = value;
}
}
}
#endregion
#region 方法
///
/// 启动监听
///
public void Start()
{
UdpLibrary.Start();
}
///
/// 关闭监听
///
public void Stop()
{
UdpLibrary.Stop();
}
///
/// 继承Udp基类接收数据方法
///
///
///
private void UdpLibraryReceiveData(object sender, ReceiveDataEventArgs e)
{
//若不适用内部封装协议则只激活接受原始数据事件
if (!IsAxAgreement)
{
OnReceiveByte(e);
return;
}
MsgCell cell = new MsgCell();
cell.FromBuffer(e.Buffer);
switch (cell.MessageId)
{
case (int)Command.RequestSendTextMSg:
OnReceiveTextMsg((MsgTypeCell)cell.Data);
break;
case (int)Command.ResponeSendFile:
OnResponeSendFile((ResponeTraFransfersFile)cell.Data);
break;
case (int)Command.ResponeSendFilePack:
OnResponeSendFilePack((ResponeTraFransfersFile)cell.Data);
break;
case (int)Command.RequestCancelReceiveFile:
OnRequestCancelReceiveFile(cell.Data.ToString());
break;
case (int)Command.RequestSendFile:
OnStartRecieve((TraFransfersFileStart)cell.Data, e.RemoteIP);
break;
case (int)Command.RequestSendFilePack:
OnRecieveBuffer((TraFransfersFile)cell.Data, e.RemoteIP);
break;
case (int)Command.RequestCancelSendFile:
OnRequestCancelSendFile(cell.Data.ToString(), e.RemoteIP);
break;
}
}
///
/// 返回是否允许发送,在发送列表中的文件不能重复发送(避免文件被占用导致错误)
///
///
///
public bool CanSend(SendFileManager sendFileManager)
{
return !SendFileManagerList.ContainsKey(sendFileManager.MD5);
}
///
/// 发送文件
///
/// 文件路径(包含完整的文件名)
public void SendFile(string fileName)
{
SendFileManager sendFileManager = new SendFileManager(fileName);
Image img = Icon.ExtractAssociatedIcon(fileName).ToBitmap();
SendFile(sendFileManager, img);
}
///
/// 发送文件
///
/// 需要发送的文件类
/// 文件ICO图标
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);
//添加
AddSendItems(sendFileManager, image);
Send((int)Command.RequestSendFile, ts);
}
}
///
/// 取消发送
///
/// MD5校验文件
public void CancelSend(string md5)
{
SendFileManager sendFileManager;
if (SendFileManagerList.TryGetValue(md5, out sendFileManager))
{
Send((int)Command.RequestCancelSendFile, md5);
lock (_sendsyncLock)
{
SendFileManagerList.Remove(md5);
sendFileManager.Dispose();
sendFileManager = null;
}
}
}
///
/// 读取文件并发送文件
///
///
///
private void SendFileManageReadFileBuffer(
object sender, ReadFileBufferEventArgs e)
{
SendFileManager sendFileManager = sender as SendFileManager;
TraFransfersFile ts = new TraFransfersFile(sendFileManager.MD5, e.Index, e.Buffer);
Send((int)Command.RequestSendFilePack, ts);
}
///
/// 发送信息
///
/// 消息标识
/// 序列化数据
public void Send(int messageId, object data)
{
Send(messageId, data, RemoteEp);
}
public void SendText(string strmsg)
{
byte[] dataBytes = Encoding.Default.GetBytes(strmsg);
MsgTypeCell msgTypeCell = new MsgTypeCell(MsgType.TxtMsg, dataBytes);
MsgCell cell = new MsgCell(0x000010, msgTypeCell);
UdpLibrary.Send(cell, RemoteEp);
}
public void SendImage(Image img)
{
MsgTypeCell msgTypeCell = new MsgTypeCell(MsgType.Pic, ImageHelper.ImageToBytes(img));
MsgCell cell = new MsgCell(0x000010, msgTypeCell);
UdpLibrary.Send(cell, RemoteEp);
}
///
/// 发送信息
///
/// 消息标识
/// 序列化数据
/// 远程主机IP
public void Send(int messageId, object data, IPEndPoint remoteIp)
{
MsgCell cell = new MsgCell(messageId, data);
UdpLibrary.Send(cell, remoteIp);
}
///
/// 发送信息
///
/// 数据
/// 远程主机IP
public void Send(byte[] data)
{
UdpLibrary.Send(data, RemoteEp);
}
///
/// 响应发送文件方法
///
///
private void OnResponeSendFile(ResponeTraFransfersFile data)
{
SendFileManager sendFileManager;
if (!SendFileManagerList.TryGetValue(data.MD5, out sendFileManager))
{
return;
}
if (data.Size > 0)
{
OnFileSendBuffer(new FileSendBufferEventArgs(sendFileManager, data.Size));
}
if (data.Index == 0)
{
if (sendFileManager != null)
{
OnFileSendAccept(new FileSendEventArgs(sendFileManager));
sendFileManager.Read(data.Index);
}
}
else
{
if (data.Index == -1)
{
OnFileSendRefuse(new FileSendEventArgs(sendFileManager));
}
SendFileManagerList.Remove(data.MD5);
sendFileManager.Dispose();
}
}
///
/// 响应发送文件包方法
///
///
private void OnResponeSendFilePack(ResponeTraFransfersFile data)
{
SendFileManager sendFileManager;
if (!SendFileManagerList.TryGetValue(data.MD5, out sendFileManager))
{
return;
}
if (data.Size > 0)
{
OnFileSendBuffer(new FileSendBufferEventArgs(sendFileManager, data.Size));
}
if (data.Index >= 0)
{
if (sendFileManager != null)
{
sendFileManager.Read(data.Index);
}
}
else
{
if (data.Index == -1)
{
OnFileSendRefuse(new FileSendEventArgs(sendFileManager));
}
else if (data.Index == -2)
{
OnFileSendComplete(new FileSendEventArgs(sendFileManager));
}
SendFileManagerList.Remove(data.MD5);
sendFileManager.Dispose();
}
}
///
/// 请求取消接收文件方法
///
///
private void OnRequestCancelReceiveFile(string md5)
{
SendFileManager sendFileManager;
if (SendFileManagerList.TryGetValue(md5, out sendFileManager))
{
OnFileSendCancel(new FileSendEventArgs(sendFileManager));
lock (_sendsyncLock)
{
SendFileManagerList.Remove(md5);
sendFileManager.Dispose();
sendFileManager = null;
}
}
Send((int)Command.ResponeCancelReceiveFile, "OK");
}
#region 接收方法
///
/// 允许接收
///
///
public void AcceptReceive(RequestSendFileEventArgs e)
{
TraFransfersFileStart traFransfersFileStart = e.TraFransfersFileStart;
IPEndPoint remoteIP = e.RemoteIP;
ResponeTraFransfersFile responeTraFransfersFile;
if (e.Cancel)
{
responeTraFransfersFile = new ResponeTraFransfersFile(traFransfersFileStart.MD5, 0, -1);
Send((int)Command.ResponeSendFile, responeTraFransfersFile, remoteIP);
}
else
{
ReceiveFileManager receiveFileManager;
if (!ReceiveFileManagerList.TryGetValue(traFransfersFileStart.MD5, out receiveFileManager))
{
receiveFileManager = new ReceiveFileManager(traFransfersFileStart.MD5, e.Path, traFransfersFileStart.FileName, traFransfersFileStart.PartCount, traFransfersFileStart.PartSize, traFransfersFileStart.Length, remoteIP);
receiveFileManager.ReceiveFileComplete += new FileReceiveCompleteEventHandler(ReceiveFileManagerReceiveFileComplete);
receiveFileManager.ReceiveFileTimeout += new EventHandler(ReceiveFileManagerReceiveFileTimeout);
ReceiveFileManagerList.Add(traFransfersFileStart.MD5, receiveFileManager);
receiveFileManager.Start();
}
responeTraFransfersFile = new ResponeTraFransfersFile(traFransfersFileStart.MD5, 0, 0);
Send((int)Command.ResponeSendFile, responeTraFransfersFile, remoteIP);
}
}
///
/// 取消接收
///
///
///
public void CancelReceive(string md5, IPEndPoint remoteIP)
{
ReceiveFileManager receiveFileManager;
if (ReceiveFileManagerList.TryGetValue(md5, out receiveFileManager))
{
Send((int)Command.RequestCancelReceiveFile, md5, remoteIP);
lock (_receivesyncLock)
{
ReceiveFileManagerList.Remove(md5);
receiveFileManager.Dispose();
receiveFileManager = null;
}
}
}
///
/// 完成接收文件
///
///
///
private void ReceiveFileManagerReceiveFileComplete(
object sender, FileReceiveCompleteEventArgs e)
{
ReceiveFileManager receiveFileManager =
sender as ReceiveFileManager;
OnFileReceiveComplete(new FileReceiveEventArgs(receiveFileManager));
ReceiveFileManagerList.Remove(receiveFileManager.MD5);
}
private void ReceiveFileManagerReceiveFileTimeout(
object sender, EventArgs e)
{
ReceiveFileManager receiveFileManager =
sender as ReceiveFileManager;
ResponeTraFransfersFile responeTraFransfersFile =
new ResponeTraFransfersFile(
receiveFileManager.MD5,
0,
receiveFileManager.GetNextReceiveIndex());
Send(
(int)Command.ResponeSendFilePack,
responeTraFransfersFile,
receiveFileManager.RemoteIP);
}
#endregion
#endregion
#region 事件
#region 发送文件事件
#region 文件发送被取消事件(当发送文件正在被接收中时对方取消接收)
[Description("文件发送被取消事件\r\n(当发送文件正在被接收中时对方取消接收)")]
public event FileSendEventHandler FileSendCancel;
///
/// 文件发送时被取消时触发事件
///
///
protected virtual void OnFileSendCancel(FileSendEventArgs e)
{
FileTransfersItem item = e.SendFileManager.Tag as FileTransfersItem;
if (item != null)
{
Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate ()
{
fileTansfersContainer.RemoveItem(item);
item.Dispose();
}));
}
FileSendCancel?.Invoke(this, e);
}
#endregion
#region 发送文件被允许接收时触发事件
[Description("发送文件被允许接收时触发事件")]
public event FileSendEventHandler FileSendAccept;
///
/// 文件被接收时触发事件
///
///
protected virtual void OnFileSendAccept(FileSendEventArgs e)
{
FileTransfersItem item = e.SendFileManager.Tag as FileTransfersItem;
if (item != null)
{
Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate ()
{
item.Start();
}));
}
FileSendAccept?.Invoke(this, e);
}
#endregion
#region 文件正在发送时触发事件
[Description("文件正在发送时触发事件")]
public event FileSendBufferEventHandler FileSendBuffer;
///
/// 文件正在发送时触发事件
///
///
protected virtual void OnFileSendBuffer(FileSendBufferEventArgs e)
{
FileTransfersItem item = e.SendFileManager.Tag as FileTransfersItem;
if (item != null)
{
Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate ()
{
item.TotalTransfersSize += e.Size;
}));
}
FileSendBuffer?.Invoke(this, e);
}
#endregion
#region 发送文件被拒绝接收时触发事件
[Description("发送文件被拒绝接收时触发事件")]
public event FileSendEventHandler FileSendRefuse;
///
/// 发送文件被拒绝接收时触发事件
/// Refuse to receive file
///
protected virtual void OnFileSendRefuse(FileSendEventArgs e)
{
FileTransfersItem item = e.SendFileManager.Tag as FileTransfersItem;
if (item != null)
{
Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate ()
{
fileTansfersContainer.RemoveItem(item);
item.Dispose();
}));
}
FileSendRefuse?.Invoke(this, e);
}
#endregion
#region 文件发送完成时触发事件
[Description("文件发送完成时触发事件")]
public event FileSendEventHandler FileSendComplete;
///
/// 文件发送完成时触发事件
///
///
protected virtual void OnFileSendComplete(FileSendEventArgs e)
{
FileTransfersItem item = e.SendFileManager.Tag as FileTransfersItem;
if (item != null)
{
Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate ()
{
fileTansfersContainer.RemoveItem(item);
item.Dispose();
}));
}
FileSendComplete?.Invoke(this, e);
}
#endregion
#region 取消发送文件事件方法
///
/// 取消发送文件事件方法
///
///
///
private void OnRequestCancelSendFile(string md5, IPEndPoint remoteIP)
{
ReceiveFileManager receiveFileManager;
if (ReceiveFileManagerList.TryGetValue(md5, out receiveFileManager))
{
OnFileReceiveCancel(new FileReceiveEventArgs(receiveFileManager));
lock (_receivesyncLock)
{
ReceiveFileManagerList.Remove(md5);
receiveFileManager.Dispose();
receiveFileManager = null;
}
}
else
{
FileReceiveEventArgs fe = new FileReceiveEventArgs();
fe.Tag = md5;
OnFileReceiveCancel(fe);
}
Send(
(int)Command.ResponeCancelSendFile, "OK", remoteIP);
}
#endregion
#endregion
#region 接收文件事件
#region 接收文本数据事件
public delegate void ReceiveTextMsgEventHandler(MsgTypeCell msgTypeCell);
[Description("接收文本数据事件")]
public event ReceiveTextMsgEventHandler ReceiveTextMsg;
///
/// 文件被接收时触发事件
///
///
protected virtual void OnReceiveTextMsg(MsgTypeCell msgTypeCell)
{
ReceiveTextMsg?.Invoke(msgTypeCell);
}
#endregion
#region 请求接收文件响应时触发事件
[Description("请求接收文件响应时触发事件")]
public event RequestSendFileEventHandler FileRecieveRequest;
///
/// 请求接收文件响应时触发事件
///
///
protected virtual void OnFileRecieveRequest(RequestSendFileEventArgs e)
{
AddReadyReceiveItem(e);
FileRecieveRequest?.Invoke(this, e);
}
#endregion
#region 文件被读取时(正在读取)触发事件
[Description("文件被读取时(正在读取)触发事件")]
public event FileReceiveBufferEventHandler FileReceiveBuffer;
///
/// 文件被读取时(正在读取)触发事件
///
///
protected virtual void OnFileReceiveBuffer(FileReceiveBufferEventArgs e)
{
FileTransfersItem item = fileTansfersContainer.Search(e.ReceiveFileManager.MD5);
if (item != null)
{
Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate ()
{
item.TotalTransfersSize += e.Size;
}));
}
FileReceiveBuffer?.Invoke(this, e);
}
#endregion
#region 文件接收完成时触发事件
[Description("文件接收完成时触发事件")]
public event FileReceiveEventHandler FileReceiveComplete;
///
/// 文件接收完成时触发事件
///
///
protected virtual void OnFileReceiveComplete(FileReceiveEventArgs e)
{
Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate ()
{
fileTansfersContainer.RemoveItem(e.ReceiveFileManager.MD5);
}));
FileReceiveComplete?.Invoke(this, e);
}
#endregion
#region 文件接收时被取消发送触发事件
[Description("接收文件被取消时触发事件\r\n(当正在接收对方文件时对方取消发送)")]
public event FileReceiveEventHandler FileReceiveCancel;
///
/// 文件接收时被取消发送触发事件
///
///
protected virtual void OnFileReceiveCancel(FileReceiveEventArgs e)
{
string md5 = string.Empty;
if (e.ReceiveFileManager != null)
{
md5 = e.ReceiveFileManager.MD5;
}
else
{
md5 = e.Tag.ToString();
}
FileTransfersItem item = fileTansfersContainer.Search(md5);
Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate ()
{
fileTansfersContainer.RemoveItem(item);
}));
FileReceiveCancel?.Invoke(this, e);
}
#endregion
#region 接收文件事件方法
///
/// 接收文件事件方法
///
///
///
private void OnRecieveBuffer(TraFransfersFile traFransfersFile, IPEndPoint remoteEp)
{
ReceiveFileManager receiveFileManager;
if (!ReceiveFileManagerList.TryGetValue(traFransfersFile.MD5, out receiveFileManager))
{
return;
}
if (receiveFileManager != null)
{
ResponeTraFransfersFile responeTraFransfersFile;
int size = receiveFileManager.ReceiveBuffer(traFransfersFile.Index, traFransfersFile.Buffer);
if (receiveFileManager.Completed)
{
responeTraFransfersFile = new ResponeTraFransfersFile(traFransfersFile.MD5, size, -2);
Send((int)Command.ResponeSendFilePack, responeTraFransfersFile, remoteEp);
}
else
{
responeTraFransfersFile = new ResponeTraFransfersFile(traFransfersFile.MD5, size, receiveFileManager.GetNextReceiveIndex());
Send((int)Command.ResponeSendFilePack, responeTraFransfersFile, remoteEp);
}
OnFileReceiveBuffer(new FileReceiveBufferEventArgs(receiveFileManager, traFransfersFile.Buffer.Length));
}
}
#endregion
#region 开始接收文件事件方法(尚未开始接收文件)
///
/// 开始接收文件事件方法(尚未开始接收文件)
///
///
///
private void OnStartRecieve(TraFransfersFileStart traFransfersFileStart, IPEndPoint remoteEp)
{
OnFileRecieveRequest(new RequestSendFileEventArgs(traFransfersFileStart, remoteEp));
}
#endregion
#endregion
#region 接受原始数据事件
public delegate void ReceiveByteEventHandler(ReceiveDataEventArgs e);
[Description("接收文本数据事件")]
public event ReceiveByteEventHandler ReceiveByte;
///
/// 文件被接收时触发事件
///
///
protected virtual void OnReceiveByte(ReceiveDataEventArgs e)
{
ReceiveByte?.Invoke(e);
}
#endregion
#endregion
#region FileTransfersItem子项
#region Items变量
private Color _baseColor = Color.FromArgb(255, 192, 128);
private Color _borderColor = Color.FromArgb(224, 224, 224);
private Color _progressBarBarColor = Color.SteelBlue;
private Color _progressBarBorderColor = Color.LightGray;
private Color _progressBarTextColor = Color.White;
#endregion
#region 接收文件子项控件
///
/// 添加准备接收文件Item
///
///
public void AddReadyReceiveItem(RequestSendFileEventArgs e)
{
TraFransfersFileStart traFransfersFileStart = e.TraFransfersFileStart;
Form.ActiveForm.BeginInvoke(new MethodInvoker(delegate ()
{
FileTransfersItem item = fileTansfersContainer.AddItem(traFransfersFileStart.MD5, "接收文件", traFransfersFileStart.FileName, traFransfersFileStart.Image, traFransfersFileStart.Length, FileTransfersItemStyle.ReadyReceive);
item.BaseColor = _baseColor;
item.BorderColor = _borderColor;
item.ProgressBarBarColor = _progressBarBarColor;
item.ProgressBarBorderColor = _progressBarBorderColor;
item.ProgressBarTextColor = _progressBarTextColor;
item.Tag = e;
item.SaveButtonClick += new EventHandler(ItemSaveButtonClick);
item.SaveToButtonClick += new EventHandler(ItemSaveToButtonClick);
item.RefuseButtonClick += new EventHandler(ItemRefuseButtonClick);
fileTansfersContainer.ResumeLayout(true);
}));
}
#region 按钮事件
///
/// 文件另存为按钮事件
///
///
///
private void ItemSaveToButtonClick(object sender, EventArgs e)
{
FileTransfersItem item = sender as FileTransfersItem;
RequestSendFileEventArgs rse = item.Tag as RequestSendFileEventArgs;
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() == DialogResult.OK)
{
rse.Path = fbd.SelectedPath;
ControlTag tag = new ControlTag(rse.TraFransfersFileStart.MD5, rse.TraFransfersFileStart.FileName, rse.RemoteIP);
item.Tag = tag;
item.Style = FileTransfersItemStyle.Receive;
item.CancelButtonClick += new EventHandler(ItemCancelButtonClick);
item.Start();
this.AcceptReceive(rse);
}
}
///
/// 保存文件按钮事件
///
///
///
private void ItemSaveButtonClick(object sender, EventArgs e)
{
FileTransfersItem item = sender as FileTransfersItem;
RequestSendFileEventArgs rse = item.Tag as RequestSendFileEventArgs;
//自动保存在程序根目录下
rse.Path = Application.StartupPath;
ControlTag tag = new ControlTag(rse.TraFransfersFileStart.MD5, rse.TraFransfersFileStart.FileName, rse.RemoteIP);
item.Tag = tag;
item.Style = FileTransfersItemStyle.Receive;
item.CancelButtonClick += new EventHandler(ItemCancelButtonClick);
item.Start();
this.AcceptReceive(rse);
}
///
/// 拒绝接收文件按钮事件
///
///
///
private void ItemRefuseButtonClick(object sender, EventArgs e)
{
FileTransfersItem item = sender as FileTransfersItem;
RequestSendFileEventArgs rse = item.Tag as RequestSendFileEventArgs;
rse.Cancel = true;
fileTansfersContainer.RemoveItem(item);
item.Dispose();
AcceptReceive(rse);
}
///
/// 取消按钮事件
///
///
///
private void ItemCancelButtonClick(object sender, EventArgs e)
{
FileTransfersItem item = sender as FileTransfersItem;
ControlTag tag = item.Tag as ControlTag;
CancelReceive(tag.MD5, tag.RemoteIP);
fileTansfersContainer.RemoveItem(item);
item.Dispose();
}
#endregion
#endregion
#region 发送文件子项控件
///
/// 添加发送文件控件Item
///
///
///
public void AddSendItems(SendFileManager sendFileManager, Image image)
{
FileTransfersItem item = fileTansfersContainer.AddItem(sendFileManager.MD5, "发送文件", sendFileManager.Name, image, sendFileManager.Length, FileTransfersItemStyle.Send);
item.BaseColor = Color.FromArgb(224, 224, 224);
item.BorderColor = _borderColor;
item.ProgressBarBarColor = _progressBarBarColor;
item.ProgressBarBorderColor = _progressBarBorderColor;
item.ProgressBarTextColor = _progressBarTextColor;
item.CancelButtonClick += new EventHandler(ItemSendCancelButtonClick);
item.Tag = sendFileManager;
sendFileManager.Tag = item;
}
#region 按钮事件
private void ItemSendCancelButtonClick(object sender, EventArgs e)
{
FileTransfersItem item = sender as FileTransfersItem;
SendFileManager sendFileManager = item.Tag as SendFileManager;
this.CancelSend(sendFileManager.MD5);
fileTansfersContainer.RemoveItem(item);
}
#endregion
#endregion
#endregion
}
}