/// <summary> /// 当将数据发送成功且对方已经收到的时候,触发此事件 /// </summary> /// <param name="iPEndPoint">对方终结点</param> internal void OndateSuccess(IPEndPoint iPEndPoint) { if (this.dateSuccess != null) { CommonMethod.eventInvoket(() => { this.dateSuccess(iPEndPoint); }); } }
/// <summary> /// 触发当接收到文本数据的事件 /// </summary> /// <param name="iPEndPoint">对方终结点</param> /// <param name="str">文本数据</param> internal void OnAcceptString(IPEndPoint iPEndPoint, string str) { if (this.AcceptString != null) { CommonMethod.eventInvoket(() => { AcceptString(iPEndPoint, str); }); } }
/// <summary> /// 当接收到图片数据的时候,触发此事件 /// </summary> /// <param name="iPEndPoint">对方终结点</param> /// <param name="bytes">图片数据</param> internal void OnAcceptByte(IPEndPoint iPEndPoint, byte[] bytes) { if (this.AcceptByte != null) { CommonMethod.eventInvoket(() => { this.AcceptByte(iPEndPoint, bytes); }); } }
/// <summary> /// 客户端完全登录成功之后要处理的事情 /// </summary> /// <param name="stateOne">TcpState</param> private void loginSuccess(TcpTransmitBox stateOne) { stateOne.ConnectOk = true; state.Add(stateOne); CommonMethod.eventInvoket(() => { Connect(stateOne.IpEndPoint); }); EngineLog(stateOne.IpEndPoint.ToString() + "登陆成功");//记录 }
/// <summary> /// 当引擎非正常原因自动断开的时候触发此事件 /// </summary> /// <param name="str">断开原因</param> internal void OnEngineLost(string str) { if (this.EngineLost != null) { CommonMethod.eventInvoket(() => { this.EngineLost(str); }); FileStart.FileStopAll();//文件处理那里中断所有的文件 } }
/// <summary> /// 当引擎完全关闭释放资源的时候触发此事件 /// </summary> internal void OnEngineClose() { if (this.EngineClose != null && _engineStart == true) { _engineStart = false; CommonMethod.eventInvoket(() => { this.EngineClose(); }); FileStart.FileStopAll();//文件处理那里中断所有的文件 } }
/// <summary> /// 关闭相连的scoket以及关联的TcpState,释放所有的资源 /// </summary> /// <param name="stateOne">TcpState</param> /// <param name="str">原因</param> private void socketRemove(TcpTransmitBox stateOne, string str) { if (stateOne == null) { return; } stateOne.WorkSocket.Close(); if (state.Remove(stateOne)) //当没有登录的时候断掉,不触发下面的事件 { CommonMethod.eventInvoket(() => { Disconnection(stateOne.IpEndPoint, str); }); //当客户端断掉的时候触发此事件 EngineLog(stateOne.IpEndPoint.ToString() + "已经断开"); //记录 FileStart.FileStopITxBase(stateOne); } stateOne = null; }
/// <summary> /// 当客户端完全连接上服务器之后要处理的一些事情 /// </summary> private void loginSuccess() { _engineStart = true; if (HeartThread == null) {//连接成功之后启动心跳线程 HeartThread = new Thread(heartThread); HeartThread.IsBackground = true; HeartThread.Start(); } if (reconnectOn) { CommonMethod.eventInvoket(() => { StartResult(true, "重连成功"); }); reconnectOn = false; reconnectCi = 0; } else { CommonMethod.eventInvoket(() => { StartResult(true, "启动成功"); }); } }
/// <summary> /// 重连模块 /// </summary> private void reconnect() { if (_reconnectMax == 0) { return; //不重连直接返回 } reconnectCi++; //每重连一次重连的次数加1 if (stateOne != null) { stateOne.WorkSocket.Close(); stateOne = null; } if (reconnectOn == false) { reconnectOn = true; CommonMethod.eventInvoket(() => { ReconnectionStart(); }); } _engineStart = false; StartEngine();//调用启动引擎 }
/// <summary> /// 登录失败之后要处理的事情 /// </summary> private void loginFailure(string str) { outtimebool = true; //登录有结果了,判断超时的线程跳出 if (_engineStart == true) //失败的时候引擎都是关闭的 { return; } if (reconnectOn && reconnectCi < _reconnectMax) { reconnect();//继续重连 } else { if (reconnectOn) { CommonMethod.eventInvoket(() => { StartResult(false, "重连失败" + str); }); } else { CommonMethod.eventInvoket(() => { StartResult(false, str); }); } CloseEngine();//不重连了就关闭客户端,释放资源 }//登录失败触发此事件 }