/// <summary> 当将数据发送成功且对方已经收到的时候,触发此事件 P1=对方终结点 </summary> internal void OndateSuccess(IPEndPoint iPEndPoint) { if (this.DateSuccess != null) { EngineTool.EventInvoket(() => { this.DateSuccess(iPEndPoint); }); } }
/// <summary> /// 有个文件要传来;请问是否接收; /// </summary> /// <param name="FileLabel">文件标签</param> /// <param name="FileName">文件名称</param> /// <param name="FileLenth">文件长度</param> /// <returns>文件地址</returns> public string ReceiveOrNo(int FileLabel, string FileName, long FileLenth) { object haveBool = EngineTool.EventInvoket(() => { return(this.fileReceiveMust.ReceiveOrNo(FileLabel, FileName, FileLenth)); }); string haveb = (string)haveBool; return(haveb); }
/// <summary> 当接收到图片数据的时候,触发此事件 P1=对方终结点 P2=图片数据 </summary> internal void OnAcceptByte(IPEndPoint iPEndPoint, byte[] bytes) { if (this.AcceptByte != null) { EngineTool.EventInvoket(() => { this.AcceptByte(iPEndPoint, bytes); }); } }
/// <summary> 当接收到文本数据的时候,触发此事件 P1=对方终结点 P2=文本数据 </summary> internal void OnAcceptString(IPEndPoint iPEndPoint, string str) { if (this.AcceptString != null) { EngineTool.EventInvoket(() => { AcceptString(iPEndPoint, str); }); } }
/// <summary> /// 对方发过来的续传确认信息;你是否同意续传; /// </summary> /// <param name="FileLabel">文件标签</param> /// <returns>同意或不同意</returns> public bool FileOrNotContingue(int FileLabel) { object haveBool = EngineTool.EventInvoket(() => { return(this.fileMustBase.FileOrNotContingue(FileLabel)); }); bool haveb = (bool)haveBool; return(haveb); }
/// <summary> 当引擎非正常原因自动断开的时候触发此事件 P1=断开原因 </summary> internal void OnEngineLost(string str) { if (this.EngineLost != null) { EngineTool.EventInvoket(() => { this.EngineLost(str); }); FileStart.FileStopAll();//文件处理那里中断所有的文件 } }
/// <summary> 当引擎完全关闭释放资源的时候触发此事件 </summary> internal void OnEngineClose() { if (this.EngineClose != null && _engineStart == true) { _engineStart = false; EngineTool.EventInvoket(() => { this.EngineClose(); }); FileStart.FileStopAll();//文件处理那里中断所有的文件 } }
/// <summary> 客户端完全登录成功之后要处理的事情 </summary> private void loginSuccess(TcpState stateOne) { stateOne.ConnectOk = true; state.Add(stateOne); EngineTool.EventInvoket(() => { Connect(stateOne.IpEndPoint); }); FileOperate(stateOne.IpEndPoint.ToString() + "登陆成功");//记录 }
/// <summary> 关闭相连的scoket以及关联的TcpState,释放所有的资源 </summary> private void socketRemove(TcpState stateOne, string str) { if (stateOne == null) { return; } stateOne.WorkSocket.Close(); if (state.Remove(stateOne)) //当没有登录的时候断掉,不触发下面的事件 { EngineTool.EventInvoket(() => { Disconnection(stateOne.IpEndPoint, str); }); //当客户端断掉的时候触发此事件 FileOperate(stateOne.IpEndPoint.ToString() + "已经断开"); //记录 FileStart.FileStopITxBase(stateOne); } stateOne = null; }
/// <summary> 重连模块 </summary> private void reconnect() { if (_reconnectMax == 0) { return; //不重连直接返回 } reconnectCi++; //每重连一次重连的次数加1 if (stateOne != null) { stateOne.WorkSocket.Close(); stateOne = null; } if (reconnectOn == false) { reconnectOn = true; EngineTool.EventInvoket(() => { ReconnectionStart(); }); } _engineStart = false; StartEngine(); }
/// <summary> 当客户端完全连接上服务器之后要处理的一些事情 </summary> private void loginSuccess() { _engineStart = true; if (HeartThread == null) { //连接成功之后启动心跳线程 HeartThread = new Thread(heartThread); HeartThread.IsBackground = true; HeartThread.Start(); } if (reconnectOn) { EngineTool.EventInvoket(() => { StartResult(true, "重连成功"); }); reconnectOn = false; reconnectCi = 0; } else { EngineTool.EventInvoket(() => { StartResult(true, "启动成功"); }); } }
/// <summary> 登录失败之后要处理的事情 </summary> private void loginFailure(string str) { outtimebool = true; //登录有结果了,判断超时的线程跳出 if (_engineStart == true) //失败的时候引擎都是关闭的 { return; } if (reconnectOn && reconnectCi < _reconnectMax) { reconnect();//继续重连 } else { if (reconnectOn) { EngineTool.EventInvoket(() => { StartResult(false, "重连失败" + str); }); } else { EngineTool.EventInvoket(() => { StartResult(false, str); }); } CloseEngine();//不重连了就关闭客户端,释放资源 }//登录失败触发此事件 }
public void FileStartOn(int FileLabel) { EngineTool.EventInvoket(() => { this.fileSendMust.FileStartOn(FileLabel); }); }
public void SendSuccess(int FileLabel) { EngineTool.EventInvoket(() => { this.fileSendMust.SendSuccess(FileLabel); }); }
/// <summary> /// 文件接收完成 /// </summary> /// <param name="FileLabel">文件标签</param> public void ReceiveSuccess(int FileLabel) { EngineTool.EventInvoket(() => { this.fileReceiveMust.ReceiveSuccess(FileLabel); }); }
/// <summary> /// 得到文件的进度;每次缓冲区为单位折算成百分比输出进度;这样可以提高效率; /// </summary> /// <param name="FileLabel">文件标签</param> /// <param name="Progress">文件进度</param> public void FileProgress(int FileLabel, int Progress) { EngineTool.EventInvoket(() => { this.fileMustBase.FileProgress(FileLabel, Progress); }); }
/// <summary> /// 对方拒绝续传;文件又处于暂停状态; /// </summary> /// <param name="FileLabel">文件标签</param> public void FileNoContinue(int FileLabel) { EngineTool.EventInvoket(() => { this.fileMustBase.FileNoContinue(FileLabel); }); }
/// <summary> /// 对方暂停;我方也已经暂停;等待着对方的再一次请求传输;会在FileOrNotContingue这里触发 /// </summary> /// <param name="FileLabel">文件标签</param> public void FileStop(int FileLabel) { EngineTool.EventInvoket(() => { this.fileMustBase.FileStop(FileLabel); }); }
/// <summary> /// 文件已中断;状态已自动改为暂停状态;等待对方上线的时候;进行续传; /// </summary> /// <param name="FileLabel">文件标签</param> /// <param name="Reason">中断原因</param> public void FileBreak(int FileLabel, string Reason) { EngineTool.EventInvoket(() => { this.fileMustBase.FileBreak(FileLabel, Reason); }); }