using HPSocketCS; using iWareCcTest.Properties; using iWareCommon.Utils; using System; namespace iWareCc.Util { /// /// Socket帮助抽象类,该类实现Socket的连接,关闭基本功能 /// public abstract class SocketServer { public TcpServer Server;//socket连接服务端 private string Ip;//需要连接的服务器IP private ushort Port;//需要连接的服务器端口 /// /// 记录socket是否开启 /// public bool IsServerStarted = false; /// /// 记录客户端是否连上 /// public bool IsClientOn = false; public SocketServer(TcpServer server, string ip, string port) { this.Server = server; this.Ip = ip; this.Port = ushort.Parse(port); //绑定事件 //绑定监听地址前触发 Server.OnPrepareListen += new TcpServerEvent.OnPrepareListenEventHandler(OnPrepareListen); //客户端连接请求被接受后触发 Server.OnAccept += new TcpServerEvent.OnAcceptEventHandler(OnAccept); //发送消息后触发 Server.OnSend += new TcpServerEvent.OnSendEventHandler(OnSend); //收到消息后触发 Server.OnReceive += new TcpServerEvent.OnReceiveEventHandler(OnReceive); //连接关闭后触发(服务端的连接通常是多个,只要某一个连接关闭了都会触发) Server.OnClose += new TcpServerEvent.OnCloseEventHandler(OnClose); //组件停止后触发 Server.OnShutdown += new TcpServerEvent.OnShutdownEventHandler(OnShutdown); } /// /// 开启socket服务 /// /// 是否连接成功 public bool ServerStart() { Server.IpAddress = Ip; Server.Port = Port; return Server.Start(); } /// /// 关闭socket连接 /// /// 是否断开成功 public bool Close() { return Server.Stop(); } /// /// 发送 /// /// /// public bool Send(IntPtr clientId, byte[] bytes) { return Server.Send(clientId, bytes, bytes.Length); } /// /// 获取IP /// /// public string GetIp() { return Ip; } /// /// 获取端口 /// /// public string GetPort() { return Port.ToString(); } /// /// 有Client连接上 /// /// /// /// protected abstract HandleResult OnAccept(IntPtr connId, IntPtr pClient); /// /// 发送信息时执行 /// /// /// /// protected abstract HandleResult OnSend(IntPtr connId, byte[] bytes); /// /// 服务器接收到信息 /// /// /// /// protected abstract HandleResult OnReceive(IntPtr connId, byte[] bytes); /// /// Server关闭时执行 /// /// /// /// /// protected abstract HandleResult OnClose(IntPtr connId, SocketOperation enOperation, int errorCode); /// /// 服务关闭 /// /// protected abstract HandleResult OnShutdown(); /// /// 服务监听 /// /// /// protected abstract HandleResult OnPrepareListen(IntPtr soListen); } }