init lserp cs 5.0
This commit is contained in:
@@ -0,0 +1,234 @@
|
||||
namespace LSServerService
|
||||
{
|
||||
using LSUtils;
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
public class LSSocket : LSASyncSocket
|
||||
{
|
||||
private int _selDirectoryId = 0;
|
||||
private string _ServerIP = "";
|
||||
private uint _ServerPort = 0;
|
||||
private const int FIONREAD = 1074030207;
|
||||
private uint m_dwUserId = 0;
|
||||
private string m_remoteIP;
|
||||
private int m_remotePort;
|
||||
|
||||
public event ParseReceiveDataEventHandle ParseReceiveDataEvent;
|
||||
|
||||
public LSSocket()
|
||||
{
|
||||
base._socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||
}
|
||||
|
||||
public void clientAdd(Socket s)
|
||||
{
|
||||
base._socket = s;
|
||||
base.ReceiveReady();
|
||||
}
|
||||
|
||||
public void Connect(string strHost, uint nPort)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.ServerIP = strHost;
|
||||
this.ServerPort = nPort;
|
||||
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(strHost), (int) nPort);
|
||||
LSWriteLog.WriteTrace("begin connect server ip={0}, port={1} ", new object[] { strHost, nPort });
|
||||
base._socket.BeginConnect(remoteEP, new AsyncCallback(this.ConnectCallback), base._socket);
|
||||
}
|
||||
catch (SocketException exception)
|
||||
{
|
||||
PubUtils.WriteLog("LSSocket.Connect SOCKET error: {0}", new object[] { exception });
|
||||
}
|
||||
catch (Exception exception2)
|
||||
{
|
||||
PubUtils.WriteLog("LSSocket.Connect error: {0}", new object[] { exception2 });
|
||||
}
|
||||
}
|
||||
|
||||
private void ConnectCallback(IAsyncResult ar)
|
||||
{
|
||||
try
|
||||
{
|
||||
((Socket) ar.AsyncState).EndConnect(ar);
|
||||
LSWriteLog.WriteTrace("connected server ip={0} port={1} success", new object[] { this.ServerIP, this.ServerPort });
|
||||
base.ReceiveReady();
|
||||
}
|
||||
catch (SocketException exception)
|
||||
{
|
||||
PubUtils.WriteLog("LSSocket.Connect SOCKET errorcode: {0} errormsg: {1}", new object[] { exception.SocketErrorCode, exception });
|
||||
base.CheckCloseState(exception.ErrorCode);
|
||||
}
|
||||
catch (Exception exception2)
|
||||
{
|
||||
PubUtils.WriteLog("LSSocket.ConnectCallback error: {0}", new object[] { exception2 });
|
||||
}
|
||||
}
|
||||
|
||||
protected override void ParseReceiveData(byte[] byteData)
|
||||
{
|
||||
this.ParseReceiveDataEvent(this, byteData);
|
||||
}
|
||||
|
||||
protected override void ReceiveCallback(IAsyncResult ar)
|
||||
{
|
||||
try
|
||||
{
|
||||
LSWriteLog.WriteTrace(this.ToString() + ".ReceiveCallback is running socketid = " + base._socket.Handle, new object[0]);
|
||||
if (!((base._socket != null) && base._socket.Connected))
|
||||
{
|
||||
base.CloseSocket();
|
||||
return;
|
||||
}
|
||||
LSWriteLog.WriteTrace(string.Concat(new object[] { this.ToString(), ".ReceiveCallback socketid = ", base._socket.Handle, " bytesAvailable is ", base._socket.Available.ToString(), " _socketstate=", this._socketstate.ToString() }), new object[0]);
|
||||
if ((base._socket.Available == 0) && (base._socketstate == 2))
|
||||
{
|
||||
return;
|
||||
}
|
||||
int count = base._socket.EndReceive(ar);
|
||||
byte[] dst = new byte[count];
|
||||
Buffer.BlockCopy(base.StateObj.buffer, 0, dst, 0, count);
|
||||
if (count > 0)
|
||||
{
|
||||
int num3;
|
||||
base._ReceivedLen += count;
|
||||
for (int i = 0; i < base._ReceivedLen; i += num3)
|
||||
{
|
||||
bool flag = (base._ReceivedLen - i) <= 8;
|
||||
Label_0158:
|
||||
if (flag)
|
||||
{
|
||||
if ((base._ReceivedLen - i) < base.StateObj.buffer.Length)
|
||||
{
|
||||
Buffer.BlockCopy(base.StateObj.buffer, i, base.StateObj.buffer, 0, base._ReceivedLen - i);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.StateObj.ExtentBuffer();
|
||||
}
|
||||
base._ReceivedLen -= i;
|
||||
base._socket.BeginReceive(base.StateObj.buffer, base._ReceivedLen, base.StateObj.buffer.Length - base._ReceivedLen, SocketFlags.None, new AsyncCallback(this.ReceiveCallback), base._socket);
|
||||
return;
|
||||
}
|
||||
num3 = BitConverter.ToInt32(base.StateObj.buffer, 4 + i);
|
||||
if ((num3 + i) > base._ReceivedLen)
|
||||
{
|
||||
flag = true;
|
||||
goto Label_0158;
|
||||
}
|
||||
byte[] buffer2 = new byte[num3];
|
||||
Buffer.BlockCopy(base.StateObj.buffer, i, buffer2, 0, num3);
|
||||
if (num3 > 102400)
|
||||
{
|
||||
byte[] buffer3 = new byte[base._ReceivedLen];
|
||||
Buffer.BlockCopy(base.StateObj.buffer, 0, buffer3, 0, base._ReceivedLen);
|
||||
PubUtils.WriteLog("received proxy data is unnormal! socketid= {0} and a packet data is :{1} and whole data is :{2}", new object[] { base._socket.Handle, buffer2, buffer3 });
|
||||
}
|
||||
else
|
||||
{
|
||||
this.ParseReceiveData(buffer2);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
base.CloseSocket();
|
||||
}
|
||||
}
|
||||
catch (SocketException exception)
|
||||
{
|
||||
PubUtils.WriteLog("LSSocket.ReceiveCallback SOCKET errorcode: {0} errormsg: {1}", new object[] { exception.SocketErrorCode, exception });
|
||||
base.CheckCloseState(exception.ErrorCode);
|
||||
}
|
||||
catch (Exception exception2)
|
||||
{
|
||||
PubUtils.WriteLog("LSSocket.ReceiveCallback error: {0}", new object[] { exception2 });
|
||||
}
|
||||
base.ContinueReceive();
|
||||
}
|
||||
|
||||
public void reConnect()
|
||||
{
|
||||
base._socketstate = 0;
|
||||
this.Connect(this.m_remoteIP, (uint) this.m_remotePort);
|
||||
}
|
||||
|
||||
public uint dwUserId
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.m_dwUserId;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.m_dwUserId = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string remoteIP
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.m_remoteIP;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.m_remoteIP = value;
|
||||
}
|
||||
}
|
||||
|
||||
public int remotePort
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.m_remotePort;
|
||||
}
|
||||
set
|
||||
{
|
||||
this.m_remotePort = value;
|
||||
}
|
||||
}
|
||||
|
||||
public int selDirectoryId
|
||||
{
|
||||
get
|
||||
{
|
||||
return this._selDirectoryId;
|
||||
}
|
||||
set
|
||||
{
|
||||
this._selDirectoryId = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string ServerIP
|
||||
{
|
||||
get
|
||||
{
|
||||
return this._ServerIP;
|
||||
}
|
||||
set
|
||||
{
|
||||
this._ServerIP = value;
|
||||
}
|
||||
}
|
||||
|
||||
public uint ServerPort
|
||||
{
|
||||
get
|
||||
{
|
||||
return this._ServerPort;
|
||||
}
|
||||
set
|
||||
{
|
||||
this._ServerPort = value;
|
||||
}
|
||||
}
|
||||
|
||||
public delegate void ParseReceiveDataEventHandle(LSSocket ProxySocket, byte[] byteData);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user