68 lines
2.2 KiB
C++
68 lines
2.2 KiB
C++
#ifndef _CUSTOM_SERVERCLIENT_SOCKET_H_
|
||
#define _CUSTOM_SERVERCLIENT_SOCKET_H_
|
||
|
||
/************************************************************
|
||
*
|
||
* 服务器接受的客户端连接类
|
||
*
|
||
* 连接建立后,套接字将被调整为异步非阻塞模式。
|
||
*
|
||
* 数据的发送使用队列堆积的形式,而不是使用缓冲区堆积
|
||
* 的方式,所有提交的待发送的数据将被保存到一个列表中排队
|
||
* 发送,在添加发送数据的时候,可以指定是否优先发送以便将
|
||
* 数据插入到待发队列的头部而优先发送。
|
||
*
|
||
***********************************************************/
|
||
|
||
#include "Thread.h"
|
||
#include "Lock.h"
|
||
|
||
using namespace wylib::time::tick64;
|
||
using namespace wylib::container;
|
||
using namespace wylib::sync::lock;
|
||
using namespace wylib::thread;
|
||
|
||
class CCustomServerClientSocket : public CCustomWorkSocket, public Counter<CCustomServerClientSocket>
|
||
{
|
||
public:
|
||
typedef CCustomWorkSocket Inherited;
|
||
|
||
public:
|
||
CCustomServerClientSocket();
|
||
CCustomServerClientSocket(SOCKET nSocket, SOCKADDR_IN *pClientAddr);
|
||
virtual ~CCustomServerClientSocket();
|
||
|
||
//获取客户端连接地址和端口
|
||
inline SOCKADDR_IN GetRemoteAddrIn(){ return m_RemoteAddr; }
|
||
//获取客户端名称
|
||
inline LPCTSTR GetRemoteHost(){ return m_sRemoteHost; }
|
||
//获取客户端端口
|
||
inline INT GetRemotePort(){ return m_nRemotePort; }
|
||
//获取和设置是否主动向客户端发送保持连接数据属性,默认值为TRUE
|
||
inline BOOL GetActiveKeepAlive(){ return m_boActiveKeepAlive; }
|
||
inline VOID SetActiveKeepAlive(const BOOL boActive){ m_boActiveKeepAlive = boActive; }
|
||
//由外部调用例行执行函数
|
||
inline VOID Run(){ SingleRun(); }
|
||
|
||
protected:
|
||
/*** 子类可能必要覆盖的函数集 ***/
|
||
//当长时间没有通信后发送保持连接的消息
|
||
virtual VOID SendKeepAlive();
|
||
|
||
protected:
|
||
//设置客户端套接字
|
||
VOID SetClientSocket(SOCKET nSocket, SOCKADDR_IN *pClientAddr);
|
||
//覆盖 例行执行函数
|
||
VOID SingleRun();
|
||
|
||
protected:
|
||
SOCKADDR_IN m_RemoteAddr; //客户端连接地址和端口
|
||
char m_sRemoteHost[128]; //客户端名称
|
||
int m_nRemotePort; //客户端端口
|
||
BOOL m_boActiveKeepAlive;//是否主动向客户端发送保持连接数据包
|
||
};
|
||
|
||
|
||
#endif
|
||
|