using System; using System.Collections.Generic; using System.Text; namespace HPSocketCS { public class UdpArqServer : UdpArqServer { public new T GetExtra(IntPtr connId) { return base.GetExtra(connId); } public bool SetExtra(IntPtr connId, T obj) { return base.SetExtra(connId, obj); } } public class UdpArqServer : UdpServer { /// /// 创建socket监听&服务组件 /// /// protected override bool CreateListener() { if (IsCreate == true || pListener != IntPtr.Zero || pServer != IntPtr.Zero) { return false; } pListener = Sdk.Create_HP_UdpArqServerListener(); if (pListener == IntPtr.Zero) { return false; } pServer = Sdk.Create_HP_UdpArqServer(pListener); if (pServer == IntPtr.Zero) { return false; } IsCreate = true; return true; } /// /// 终止服务并释放资源 /// public override void Destroy() { Stop(); if (pServer != IntPtr.Zero) { Sdk.Destroy_HP_UdpArqServer(pServer); pServer = IntPtr.Zero; } if (pListener != IntPtr.Zero) { Sdk.Destroy_HP_UdpArqServerListener(pListener); pListener = IntPtr.Zero; } IsCreate = false; } /// /// 获取或设置是否开启 NoDelay 模式 /// public bool NoDelay { get { return Sdk.HP_UdpArqServer_IsNoDelay(pServer); } set { Sdk.HP_UdpArqServer_SetNoDelay(pServer, value); } } /// /// 获取或设置是否关闭拥塞控制 /// public bool TurnoffCongestCtrl { get { return Sdk.HP_UdpArqServer_IsTurnoffCongestCtrl(pServer); } set { Sdk.HP_UdpArqServer_SetTurnoffCongestCtrl(pServer, value); } } /// /// 获取或设置数据刷新间隔 /// public uint FlushInterval { get { return Sdk.HP_UdpArqServer_GetFlushInterval(pServer); } set { Sdk.HP_UdpArqServer_SetFlushInterval(pServer, value); } } /// /// 获取或设置快速重传 ACK 跨越次数 /// public uint ResendByAcks { get { return Sdk.HP_UdpArqServer_GetResendByAcks(pServer); } set { Sdk.HP_UdpArqServer_SetResendByAcks(pServer, value); } } /// /// 获取或设置发送窗口大小 /// public uint SendWndSize { get { return Sdk.HP_UdpArqServer_GetSendWndSize(pServer); } set { Sdk.HP_UdpArqServer_SetSendWndSize(pServer, value); } } /// /// 获取或设置接收窗口大小 /// public uint RecvWndSize { get { return Sdk.HP_UdpArqServer_GetRecvWndSize(pServer); } set { Sdk.HP_UdpArqServer_SetRecvWndSize(pServer, value); } } /// /// 获取或设置最小重传超时时间 /// public uint MinRto { get { return Sdk.HP_UdpArqServer_GetMinRto(pServer); } set { Sdk.HP_UdpArqServer_SetMinRto(pServer, value); } } /// /// 获取或设置最大传输单元 /// public uint MaxTransUnit { get { return Sdk.HP_UdpArqServer_GetMaxTransUnit(pServer); } set { Sdk.HP_UdpArqServer_SetMaxTransUnit(pServer, value); } } /// /// 获取或设置最大数据包大小 /// public uint MaxMessageSize { get { return Sdk.HP_UdpArqServer_GetMaxMessageSize(pServer); } set { Sdk.HP_UdpArqServer_SetMaxMessageSize(pServer, value); } } /// /// 获取或设置握手超时时间 /// public uint HandShakeTimeout { get { return Sdk.HP_UdpArqServer_GetHandShakeTimeout(pServer); } set { Sdk.HP_UdpArqServer_SetHandShakeTimeout(pServer, value); } } /// /// 获取等待发送包数量 /// /// /// public int GetWaitingSendMessageCount(IntPtr dwConnId) { var count = 0; if (Sdk.HP_UdpArqServer_GetWaitingSendMessageCount(pServer, dwConnId, ref count)) { return count; } return 0; } } }