CMNetwork/inc/hgl/network/IOSocket.h

115 lines
4.6 KiB
C
Raw Normal View History

2022-05-25 19:03:06 +08:00
#ifndef HGL_NETWORK_IOSOCKET_INCLUDE
#define HGL_NETWORK_IOSOCKET_INCLUDE
#include<hgl/network/Socket.h>
namespace hgl
{
namespace network
{
/**
* Socket
*/
class IOSocket:public Socket ///传输数据用Socket基类
{
protected:
int64 send_total; ///<发送字节数统计
int64 recv_total; ///<接收字节数统计
double recv_time_out; ///<数据接收超时
double last_recv_time; ///<最后一次接收数据的时间
public:
IOSocket()
{
Clear();
}
virtual ~IOSocket()=default;
virtual void Clear()
{
send_total=0;
recv_total=0;
recv_time_out=HGL_NETWORK_DOUBLE_TIME_OUT;
last_recv_time=0;
}
virtual void CloseSocket()override ///<关闭连接
{
Socket::CloseSocket();
Clear();
}
virtual const double &GetRecvTimeOut()const{return recv_time_out;} ///<取得接收数据超时时间
virtual void SetRecvTimeOut(const double to){recv_time_out=to;} ///<设置接收数据超时时间
public: //事件函数
/**
*
* @param recv_buf_size (:-1)
* @param ct
* @return
*/
virtual int OnRecv(int recv_buf_size=-1,const double ct=0)
{
last_recv_time=ct;
return 0;
}
/**
*
* @param send_buf_size (:-1)
* @param left_bytes (0SOCKET从列表中反复添加删除)
* @return
*/
virtual int OnSend(int send_buf_size/*,int &left_bytes*/)
{
return 0;
}
/**
*
* @param errno_number
*/
virtual void OnError(int errno_number)
{
}
/**
*
*/
virtual void OnClose()
{
}
/**
* 便
* @return socket出错需要退出
*/
virtual bool OnUpdate()=0;
public: //属性函数
const int64 GetSendTotal()const{return send_total;} ///<取得发送字节数统计
const int64 GetRecvTotal()const{return recv_total;} ///<取得接收字节数统计
const void RestartLastRecvTime(){last_recv_time=0;} ///<复位最后获取数据时间
const double GetLastRecvTime()const{return last_recv_time;} ///<取得最后获取数据时间
const bool CheckRecvTimeOut(const double ct) ///<检测是否超时
{
if((last_recv_time>0)
&&(last_recv_time+recv_time_out<ct))
return(true);
return(false);
}
};//class IOSocket
}//namespace network
}//namespace hgl
#endif//HGL_NETWORK_IOSOCKET_INCLUDE