using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace HPSocketCS { public class SSLPullServerEvent { public delegate HandleResult OnReceiveEventHandler(IntPtr connId, int length); } public class SSLPullServer : SSLServer { /// /// 数据到达事件 /// public new event SSLPullServerEvent.OnReceiveEventHandler OnReceive; public SSLPullServer() : base() { } /// /// /// /// 验证模式 /// 证书文件(客户端可选) /// 私钥文件(客户端可选) /// 私钥密码(没有密码则为空) /// CA 证书文件或目录(单向验证或客户端可选) /// SNI 回调函数指针(可选) public SSLPullServer(SSLVerifyMode verifyModel, string pemCertFile, string pemKeyFile, string keyPasswod, string caPemCertFileOrPath, SSLSdk.SNIServerNameCallback sniServerNameCallback) : base(verifyModel, pemCertFile, pemKeyFile, keyPasswod, caPemCertFileOrPath, sniServerNameCallback) { } /// /// 创建socket监听&服务组件 /// /// protected override bool CreateListener() { if (IsCreate == true || pListener != IntPtr.Zero || pServer != IntPtr.Zero) { return false; } pListener = Sdk.Create_HP_TcpPullServerListener(); if (pListener == IntPtr.Zero) { return false; } pServer = SSLSdk.Create_HP_SSLPullServer(pListener); if (pServer == IntPtr.Zero) { return false; } IsCreate = true; return true; } new Sdk.OnPullReceive _OnReceive = null; protected override void SetCallback() { _OnReceive = new Sdk.OnPullReceive(SDK_OnReceive); Sdk.HP_Set_FN_Server_OnPullReceive(pListener, _OnReceive); base.SetCallback(); } protected HandleResult SDK_OnReceive(IntPtr pSender, IntPtr connId, int length) { if (OnReceive != null) { return OnReceive(connId, length); } return HandleResult.Ignore; } /// /// 抓取数据 /// 用户通过该方法从 Socket 组件中抓取数据 /// /// /// /// /// public FetchResult Fetch(IntPtr connId, IntPtr pBuffer, int size) { return Sdk.HP_TcpPullServer_Fetch(pServer, connId, pBuffer, size); } /// /// 抓取数据 /// 用户通过该方法从 Socket 组件中抓取数据 /// /// /// /// /// public FetchResult Peek(IntPtr connId, IntPtr pBuffer, int size) { return Sdk.HP_TcpPullServer_Peek(pServer, connId, pBuffer, size); } /// /// 终止服务并释放资源 /// public override void Destroy() { Stop(); if (pServer != IntPtr.Zero) { SSLSdk.Destroy_HP_SSLPullServer(pServer); pServer = IntPtr.Zero; } if (pListener != IntPtr.Zero) { Sdk.Destroy_HP_TcpPullServerListener(pListener); pListener = IntPtr.Zero; } IsCreate = false; } } }