using HPSocketCS;
using iWareCc.Conveyor.Entity;
using iWareCc.Conveyor.Service;
using iWareCc.Properties;
using iWareCommon.Utils;
using System;
using iWareCc.Util;
using System.Text;
using System.Runtime.InteropServices;
namespace iWareCc.Conveyor.Socket
{
///
/// 接收端Socket的实现类
///
public class GateSocketServer:SocketServer
{
///
/// 端口对象
///
private GateEntity Gate;
public GateSocketServer(TcpServer server, string ip, string port)
: base(server, ip, port)
{
}
public GateSocketServer(GateEntity gate, TcpServer server, string ip, string port)
: base(server, ip, port)
{
this.Gate = gate;
}
///
/// 有客户端连入到
///
///
///
///
protected override HandleResult OnAccept(IntPtr connId, IntPtr pClient)
{
LogTextHelper.WriteLine(Resources.LogDir, "端口{0}服务已连接,连接ID:{1}",Gate.Place.PlaceTypeName,connId);
string ip = string.Empty;
ushort port = 0;
if (base.Server.GetRemoteAddress(connId, ref ip, ref port))
{
IsClientOn = true;//将客户端连接设为连接
}
return HandleResult.Ok;
}
///
/// 客户端断开时执行的代码
///
///
///
///
///
protected override HandleResult OnClose(IntPtr connId, SocketOperation enOperation, int errorCode)
{
string ip = string.Empty;
ushort port = 0;
if (base.Server.GetRemoteAddress(connId, ref ip, ref port))
{
IsClientOn = false;//将客户端连接设为断开
}
LogTextHelper.WriteLine(Resources.LogDir, "端口{0}服务已断开", Gate.Place.PlaceTypeName);
return HandleResult.Ok;
}
///
/// 接收到字符串后的操作
///
///
///
///
protected override HandleResult OnReceive(IntPtr connId, byte[] bytes)
{
new GateService(Gate).AddToDatagramPoolReceive(ASCIIEncoding.ASCII.GetString(bytes));
LogTextHelper.WriteLine(Resources.LogDir+@"/端口接收的套接字信息/" + Gate.Place.PlaceTypeName, ASCIIEncoding.ASCII.GetString(bytes));
if (Gate.ServerReceiveLogger.Count >= 20)
{
Gate.ServerReceiveLogger.RemoveAt(0);
}
Gate.ServerReceiveLogger.Add(ASCIIEncoding.ASCII.GetString(bytes));
return HandleResult.Ok;
}
///
/// 发送字节码数值后的操作
///
///
///
///
protected override HandleResult OnSend(IntPtr connId, byte[] bytes)
{
LogTextHelper.WriteLine(Resources.LogDir + @"/端口发送的套接字信息/" + Gate.Place.PlaceTypeName, ASCIIEncoding.ASCII.GetString(bytes));
if (Gate.ServerSendLogger.Count >= 20)
{
Gate.ServerSendLogger.RemoveAt(0);
}
Gate.ServerSendLogger.Add(ASCIIEncoding.ASCII.GetString(bytes));
return HandleResult.Ok;
}
///
/// 断开socket服务成功后执行的方法
///
///
protected override HandleResult OnShutdown()
{
//服务开启状态设为断开
IsServerStarted = false;
return HandleResult.Ok;
}
///
/// 连接成功后的操作
///
///
///
protected override HandleResult OnPrepareListen(IntPtr soListen)
{
//服务开启状态设为开启
IsServerStarted = true;
return HandleResult.Ok;
}
}
}