using HPSocketCS;
|
using iWareCc.Properties;
|
using iWareCommon.Utils;
|
using System;
|
namespace iWareCc.Util
|
{
|
/// <summary>
|
/// Socket帮助抽象类,该类实现Socket的连接,关闭基本功能
|
/// </summary>
|
public abstract class SocketServer
|
{
|
|
public TcpServer Server;//socket连接服务端
|
private string Ip;//需要连接的服务器IP
|
private ushort Port;//需要连接的服务器端口
|
/// <summary>
|
/// 记录socket是否开启
|
/// </summary>
|
public bool IsServerStarted = false;
|
|
/// <summary>
|
/// 记录客户端是否连上
|
/// </summary>
|
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);
|
}
|
|
/// <summary>
|
/// 开启socket服务
|
/// </summary>
|
/// <returns>是否连接成功</returns>
|
public bool ServerStart()
|
{
|
Server.IpAddress = Ip;
|
Server.Port = Port;
|
return Server.Start();
|
}
|
|
|
/// <summary>
|
/// 关闭socket连接
|
/// </summary>
|
/// <returns>是否断开成功</returns>
|
public bool Close()
|
{
|
return Server.Stop();
|
}
|
|
/// <summary>
|
/// 发送
|
/// </summary>
|
/// <param name="bytes"></param>
|
/// <returns></returns>
|
public bool Send(IntPtr clientId, byte[] bytes)
|
{
|
return Server.Send(clientId, bytes, bytes.Length);
|
}
|
|
/// <summary>
|
/// 获取IP
|
/// </summary>
|
/// <returns></returns>
|
public string GetIp()
|
{
|
return Ip;
|
}
|
|
/// <summary>
|
/// 获取端口
|
/// </summary>
|
/// <returns></returns>
|
public string GetPort()
|
{
|
return Port.ToString();
|
}
|
|
/// <summary>
|
/// 有Client连接上
|
/// </summary>
|
/// <param name="connId"></param>
|
/// <param name="pClient"></param>
|
/// <returns></returns>
|
protected abstract HandleResult OnAccept(IntPtr connId, IntPtr pClient);
|
|
/// <summary>
|
/// 发送信息时执行
|
/// </summary>
|
/// <param name="connId"></param>
|
/// <param name="bytes"></param>
|
/// <returns></returns>
|
protected abstract HandleResult OnSend(IntPtr connId, byte[] bytes);
|
|
|
/// <summary>
|
/// 服务器接收到信息
|
/// </summary>
|
/// <param name="connId"></param>
|
/// <param name="bytes"></param>
|
/// <returns></returns>
|
protected abstract HandleResult OnReceive(IntPtr connId, byte[] bytes);
|
|
|
/// <summary>
|
/// Server关闭时执行
|
/// </summary>
|
/// <param name="connId"></param>
|
/// <param name="enOperation"></param>
|
/// <param name="errorCode"></param>
|
/// <returns></returns>
|
protected abstract HandleResult OnClose(IntPtr connId, SocketOperation enOperation, int errorCode);
|
|
/// <summary>
|
/// 服务关闭
|
/// </summary>
|
/// <returns></returns>
|
protected abstract HandleResult OnShutdown();
|
|
|
/// <summary>
|
/// 服务监听
|
/// </summary>
|
/// <param name="soListen"></param>
|
/// <returns></returns>
|
protected abstract HandleResult OnPrepareListen(IntPtr soListen);
|
}
|
}
|