Files
lserp_cs_6.0/插件库/Lskj.AttachStart/Client/Model/SocketClient.cs
T
cyf ab56a9bcf7 基线 SVN r240
SVN-Revision: r240
2025-02-06 06:46:06 +00:00

195 lines
7.2 KiB
C#

/******************************
* 说明: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
{
/// <summary>
/// Class SocketClient.
/// </summary>
public class SocketClient
{
private LSSocket _socket;
/// <summary>
/// Socket对象
/// </summary>
/// <value>The socket object.</value>
public LSSocket SocketObj { get { return this._socket; } }
/// <summary>
/// <para>说明:检查Socket状态</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-01-22 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
public bool CheckSocketState()
{
return this._socket != null && this._socket.SocketState == 1;
}
/// <summary>
/// <para>说明:连接Socket服务器</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-01-22 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
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);
}
}
/// <summary>
/// <para>说明:释放所有资源</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-01-22 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
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;
}
}
}
}
/// <summary>
/// <para>说明:Scoket关闭</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-01-22 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="AsyncSocket">The asynchronous socket.</param>
private void _socket_SocketCloseEvent(LSASyncSocket AsyncSocket)
{
}
/// <summary>
/// <para>说明:Socket接收到数据触发</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-01-22 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="ProxySocket">The proxy socket.</param>
/// <param name="byteData">The byte data.</param>
private void _socket_ParseReceiveDataEvent(LSSocket ProxySocket, byte[] byteData)
{
LSSocketRev socketRev = new LSSocketRev
{
ClientSocket = ProxySocket,
ByteData = byteData
};
LSQueueManage.InsertSocketRevData(socketRev);
LogHelper.Instance.WriteLog("OnRevServerSocketData 插入列表数据执行完毕.");
}
}
}