using System;
using System.Collections.Generic;
using System.Text;
namespace HPSocketCS
{
public class UdpArqClient : UdpClient
{
///
/// 创建socket监听&服务组件
///
///
protected override bool CreateListener()
{
if (IsCreate == true || pListener != IntPtr.Zero || pClient != IntPtr.Zero)
{
return false;
}
pListener = Sdk.Create_HP_UdpArqClientListener();
if (pListener == IntPtr.Zero)
{
return false;
}
pClient = Sdk.Create_HP_UdpArqClient(pListener);
if (pClient == IntPtr.Zero)
{
return false;
}
IsCreate = true;
return true;
}
///
/// 终止服务并释放资源
///
public override void Destroy()
{
Stop();
if (pClient != IntPtr.Zero)
{
Sdk.Destroy_HP_UdpArqClient(pClient);
pClient = IntPtr.Zero;
}
if (pListener != IntPtr.Zero)
{
Sdk.Destroy_HP_UdpArqClientListener(pListener);
pListener = IntPtr.Zero;
}
IsCreate = false;
}
///
/// 获取或设置是否开启 NoDelay 模式
///
public bool NoDelay
{
get
{
return Sdk.HP_UdpArqClient_IsNoDelay(pClient);
}
set
{
Sdk.HP_UdpArqClient_SetNoDelay(pClient, value);
}
}
///
/// 获取或设置是否关闭拥塞控制
///
public bool TurnoffCongestCtrl
{
get
{
return Sdk.HP_UdpArqClient_IsTurnoffCongestCtrl(pClient);
}
set
{
Sdk.HP_UdpArqClient_SetTurnoffCongestCtrl(pClient, value);
}
}
///
/// 获取或设置数据刷新间隔
///
public uint FlushInterval
{
get
{
return Sdk.HP_UdpArqClient_GetFlushInterval(pClient);
}
set
{
Sdk.HP_UdpArqClient_SetFlushInterval(pClient, value);
}
}
///
/// 获取或设置快速重传 ACK 跨越次数
///
public uint ResendByAcks
{
get
{
return Sdk.HP_UdpArqClient_GetResendByAcks(pClient);
}
set
{
Sdk.HP_UdpArqClient_SetResendByAcks(pClient, value);
}
}
///
/// 获取或设置发送窗口大小
///
public uint SendWndSize
{
get
{
return Sdk.HP_UdpArqClient_GetSendWndSize(pClient);
}
set
{
Sdk.HP_UdpArqClient_SetSendWndSize(pClient, value);
}
}
///
/// 获取或设置接收窗口大小
///
public uint RecvWndSize
{
get
{
return Sdk.HP_UdpArqClient_GetRecvWndSize(pClient);
}
set
{
Sdk.HP_UdpArqClient_SetRecvWndSize(pClient, value);
}
}
///
/// 获取或设置最小重传超时时间
///
public uint MinRto
{
get
{
return Sdk.HP_UdpArqClient_GetMinRto(pClient);
}
set
{
Sdk.HP_UdpArqClient_SetMinRto(pClient, value);
}
}
///
/// 获取或设置最大传输单元
///
public uint MaxTransUnit
{
get
{
return Sdk.HP_UdpArqClient_GetMaxTransUnit(pClient);
}
set
{
Sdk.HP_UdpArqClient_SetMaxTransUnit(pClient, value);
}
}
///
/// 获取或设置最大数据包大小
///
public uint MaxMessageSize
{
get
{
return Sdk.HP_UdpArqClient_GetMaxMessageSize(pClient);
}
set
{
Sdk.HP_UdpArqClient_SetMaxMessageSize(pClient, value);
}
}
///
/// 获取或设置握手超时时间
///
public uint HandShakeTimeout
{
get
{
return Sdk.HP_UdpArqClient_GetHandShakeTimeout(pClient);
}
set
{
Sdk.HP_UdpArqClient_SetHandShakeTimeout(pClient, value);
}
}
///
/// 获取等待发送包数量
///
///
public int GetWaitingSendMessageCount()
{
var count = 0;
if (Sdk.HP_UdpArqClient_GetWaitingSendMessageCount(pClient, ref count))
{
return count;
}
return 0;
}
}
}