/******************************
* 说明: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 插入列表数据执行完毕.");
}
}
}