using HPSocketCS;
using iWareCc.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);
}
}