/****************************** * 说明:Socket客户端 * 创建人:龚宇超 * 创建日期:2018-01-22 * 修改人: * 修改日期: * 修改备注: * 版本:1.0.0.0 ******************************/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using Lskj.AttachStart.Service; using Lskj.Util; using System.Data; using Lskj.Model; using Lskj.Core; using System.Threading; namespace Lskj.Attach.Client.Model { /// /// Class SocketClient. /// public class SocketClient { private LSSocket _socket; /// /// Socket对象 /// /// The socket object. public LSSocket SocketObj { get { return this._socket; } } /// /// 说明:检查Socket状态 /// 创建人:龚宇超 /// 创建日期:2018-01-22 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// true if XXXX, false otherwise. public bool CheckSocketState() { return this._socket != null && this._socket.SocketState == 1; } /// /// 说明:连接Socket服务器 /// 创建人:龚宇超 /// 创建日期:2018-01-22 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void ConnectServer() { try { string port = DBConfig.Instance.Internet ? SystemInfo.Instance.InternetPort : SystemInfo.Instance.LanPort; string ip = DBConfig.Instance.Internet ? SystemInfo.Instance.InternetIp : SystemInfo.Instance.LanIp; if(string.IsNullOrEmpty(port))port ="7859"; LogHelper.Instance.WriteLog(string.Format("准备连接服务器:{0}", ip + ":" + port)); this._socket = new LSSocket(); this._socket.Connect(ip, uint.Parse(port)); this._socket.ParseReceiveDataEvent += new LSSocket.ParseReceiveDataEventHandle(_socket_ParseReceiveDataEvent); this._socket.SocketCloseEvent += new LSASyncSocket.SocketCloseEventHandle(_socket_SocketCloseEvent); } catch (Exception ex) { LogHelper.Instance.WriteError(ex); } } /// /// 说明:释放所有资源 /// 创建人:龚宇超 /// 创建日期:2018-01-22 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void FreeAllResources() { Thread.Sleep(1000); GlobalVariable.NeedExit = true; Thread.Sleep(1000); GlobalVariable.ThreadObj.Interrupt(); LSFileManage.dispose(); } public void OnHeardTimer() { S2C2S_Heart structObj = new S2C2S_Heart(true); this._socket.Send(structObj); } public void ProcessRevDataFromServer() { Thread.CurrentThread.IsBackground = true; LSSocketRev socketRev = null; while (!GlobalVariable.bNeedExit) { Exception exception; try { try { socketRev = LSQueueManage.GetSocketRevData(); LSWriteLog.WriteTrace("------------------ProcessRevDataFromServer----已经获取到列表数据", new object[0]); if (GlobalVariable.bNeedExit) { break; } } catch (Exception exception1) { exception = exception1; PubUtils.WriteLog("ProcessRevDataFromServer 前面的 error: {0}", new object[] { exception.Message.ToString() }); throw new Exception(exception.Message.ToString()); } GlobalVariable.BaseFormObj.ParseDataFromServerMsg(socketRev); } catch (ThreadAbortException exception2) { PubUtils.WriteLog("ProcessRevDataFromServer ThreadAbortException: {0}", new object[] { exception2 }); break; } catch (ThreadInterruptedException exception3) { PubUtils.WriteLog("ProcessRevDataFromServer ThreadInterruptedException: {0}", new object[] { exception3 }); break; } catch (Exception exception6) { exception = exception6; if (socketRev != null) { PubUtils.WriteLog("ProcessRevDataFromServer error: {0},ProxySocket.SocketState: {1} ,byte data is:\n{2}", new object[] { exception, socketRev.ClientSocket.SocketState, socketRev.ByteData }); } else { PubUtils.WriteLog("ProcessRevDataFromServer error: {0}", new object[] { exception }); } } finally { if (socketRev != null) { socketRev = null; } } } } /// /// 说明:Scoket关闭 /// 创建人:龚宇超 /// 创建日期:2018-01-22 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The asynchronous socket. private void _socket_SocketCloseEvent(LSASyncSocket AsyncSocket) { } /// /// 说明:Socket接收到数据触发 /// 创建人:龚宇超 /// 创建日期:2018-01-22 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The proxy socket. /// The byte data. private void _socket_ParseReceiveDataEvent(LSSocket ProxySocket, byte[] byteData) { LSSocketRev socketRev = new LSSocketRev { ClientSocket = ProxySocket, ByteData = byteData }; LSQueueManage.InsertSocketRevData(socketRev); LogHelper.Instance.WriteLog("OnRevServerSocketData 插入列表数据执行完毕."); } } }