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; } } }