using System; using System.Collections.Generic; using System.Linq; using System.Text; using HPSocketCS.SDK; namespace HPSocketCS { public class TcpPullAgentEvent { public delegate HandleResult OnReceiveEventHandler(IntPtr connId, int length); } public class TcpPullAgent : TcpAgent { protected new TcpPullAgentEvent.OnReceiveEventHandler OnReceive; public TcpPullAgent() { CreateListener(); } ~TcpPullAgent() { Destroy(); } /// /// 创建socket监听&服务组件 /// /// 是否使用tcppullAgent类默认回调函数 /// protected override bool CreateListener() { if (IsCreate == true || pListener != IntPtr.Zero || pAgent != IntPtr.Zero) { return false; } pListener = HPSocketSdk.Create_HP_TcpPullAgentListener(); if (pListener == IntPtr.Zero) { return false; } pAgent = HPSocketSdk.Create_HP_TcpPullAgent(pListener); if (pAgent == IntPtr.Zero) { return false; } IsCreate = true; return true; } /// /// 抓取数据 /// 用户通过该方法从 Socket 组件中抓取数据 /// /// /// /// /// public FetchResult Fetch(IntPtr connId, IntPtr pBuffer, int size) { return HPSocketSdk.HP_TcpPullAgent_Fetch(pAgent, connId, pBuffer, size); } /// /// 抓取数据 /// 用户通过该方法从 Socket 组件中抓取数据 /// /// /// /// /// public FetchResult Peek(IntPtr connId, IntPtr pBuffer, int size) { return HPSocketSdk.HP_TcpPullAgent_Peek(pAgent, connId, pBuffer, size); } HPSocketCS.SDK.HPSocketSdk.OnPullReceive _OnReceive = null; /// /// 设置回调函数 /// /// /// /// /// /// /// /// protected override void SetCallback() { _OnReceive = new HPSocketSdk.OnPullReceive(SDK_OnReceive); // 设置 Socket 监听器回调函数 HPSocketSdk.HP_Set_FN_Agent_OnPullReceive(pListener, _OnReceive); base.SetCallback(); } protected virtual HandleResult SDK_OnReceive(IntPtr connId, int length) { if (OnReceive != null) { OnReceive(connId, length); } return HandleResult.Ignore; } /// /// 释放TcpPullAgent和TcpPullAgentListener /// public override void Destroy() { Stop(); if (pAgent != IntPtr.Zero) { HPSocketSdk.Destroy_HP_TcpPullAgent(pAgent); pAgent = IntPtr.Zero; } if (pListener != IntPtr.Zero) { HPSocketSdk.Destroy_HP_TcpPullAgentListener(pListener); pListener = IntPtr.Zero; } IsCreate = false; } } }