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
|
{
|
/// <summary>
|
/// 接收端Socket的实现类
|
/// </summary>
|
public class GateSocketServer:SocketServer
|
{
|
/// <summary>
|
/// 端口对象
|
/// </summary>
|
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;
|
}
|
|
|
/// <summary>
|
/// 有客户端连入到
|
/// </summary>
|
/// <param name="connId"></param>
|
/// <param name="pClient"></param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 客户端断开时执行的代码
|
/// </summary>
|
/// <param name="connId"></param>
|
/// <param name="enOperation"></param>
|
/// <param name="errorCode"></param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 接收到字符串后的操作
|
/// </summary>
|
/// <param name="connId"></param>
|
/// <param name="bytes"></param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 发送字节码数值后的操作
|
/// </summary>
|
/// <param name="connId"></param>
|
/// <param name="bytes"></param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 断开socket服务成功后执行的方法
|
/// </summary>
|
/// <returns></returns>
|
protected override HandleResult OnShutdown()
|
{
|
//服务开启状态设为断开
|
IsServerStarted = false;
|
return HandleResult.Ok;
|
}
|
|
/// <summary>
|
/// 连接成功后的操作
|
/// </summary>
|
/// <param name="soListen"></param>
|
/// <returns></returns>
|
protected override HandleResult OnPrepareListen(IntPtr soListen)
|
{
|
//服务开启状态设为开启
|
IsServerStarted = true;
|
|
return HandleResult.Ok;
|
}
|
}
|
}
|