126 lines
3.6 KiB
C
126 lines
3.6 KiB
C
|
|
#ifndef _CUSTOM_CLIENT_SOCKET_H_
|
|||
|
|
#define _CUSTOM_CLIENT_SOCKET_H_
|
|||
|
|
|
|||
|
|
/************************************************************
|
|||
|
|
|
|||
|
|
服务器与服务器之间通信的客户端套接字连接模型类
|
|||
|
|
|
|||
|
|
每建立一个连接类,将自动创建一个线程用于自动化处理
|
|||
|
|
连接的数据和进行逻辑处理。
|
|||
|
|
|
|||
|
|
套接字在连接建立后,将被调整为异步非阻塞模式。
|
|||
|
|
|
|||
|
|
数据的发送使用队列堆积的形式,而不是使用缓冲区堆积
|
|||
|
|
的方式,所有提交的待发送的数据将被保存到一个列表中排队
|
|||
|
|
发送,在添加发送数据的时候,可以指定是否优先发送以便将
|
|||
|
|
数据插入到待发队列的头部而优先发送。
|
|||
|
|
|
|||
|
|
***********************************************************/
|
|||
|
|
#include "_osdef.h"
|
|||
|
|
#include "Thread.h"
|
|||
|
|
|
|||
|
|
using namespace wylib::time::tick64;
|
|||
|
|
using namespace wylib::container;
|
|||
|
|
using namespace wylib::sync::lock;
|
|||
|
|
using namespace wylib::thread;
|
|||
|
|
|
|||
|
|
class CCustomClientSocket :
|
|||
|
|
public CCustomWorkSocket,
|
|||
|
|
public wylib::thread::CBaseThread
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
typedef CCustomWorkSocket Inherited;
|
|||
|
|
typedef wylib::thread::CBaseThread InheritedThread;
|
|||
|
|
public:
|
|||
|
|
CCustomClientSocket();
|
|||
|
|
virtual ~CCustomClientSocket();
|
|||
|
|
|
|||
|
|
//获取客户端名称
|
|||
|
|
inline LPCTSTR GetClientName(){ return m_sClientName; };
|
|||
|
|
//获取远程服务器地址
|
|||
|
|
inline LPCTSTR GetServerHost(){ return m_sSrvHost; }
|
|||
|
|
//设置远程服务器地址(支持域名)
|
|||
|
|
VOID SetServerHost(LPCTSTR sHost);
|
|||
|
|
//获取远程服务器端口
|
|||
|
|
inline INT_PTR GetServerPort(){ return m_nSrvPort; }
|
|||
|
|
//设置远程服务器端口
|
|||
|
|
VOID SetServerPort(const INT_PTR nPort);
|
|||
|
|
|
|||
|
|
//启动客户端
|
|||
|
|
BOOL Startup();
|
|||
|
|
//停止客户端
|
|||
|
|
VOID Stop();
|
|||
|
|
|
|||
|
|
//是否要检测内存
|
|||
|
|
VOID SetCheckMemory(bool bCheckMemory)
|
|||
|
|
{
|
|||
|
|
m_bNeedCheckMemory =bCheckMemory;
|
|||
|
|
}
|
|||
|
|
protected:
|
|||
|
|
const static int CHECK_MEMORY_INTERVAL = 5 * 60 * 1000;
|
|||
|
|
|
|||
|
|
/*** 以下函数集为子类可能需要覆盖的函数 ***/
|
|||
|
|
//当连接处理线程启动后立即调用
|
|||
|
|
virtual VOID OnWorkThreadStart();
|
|||
|
|
//当连接处理线程停止前调用
|
|||
|
|
virtual VOID OnWorkThreadStop();
|
|||
|
|
//连接到服务器成功后发送注册客户端的消息
|
|||
|
|
virtual VOID SendRegisteClient();
|
|||
|
|
//当长时间没有通信后发送保持连接的消息
|
|||
|
|
virtual VOID SendKeepAlive();
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
//设置客户端名称
|
|||
|
|
VOID SetClientName(LPCTSTR sClientName);
|
|||
|
|
//连接到服务器
|
|||
|
|
BOOL ConnectToServer();
|
|||
|
|
//覆盖例行执行函数
|
|||
|
|
VOID SingleRun();
|
|||
|
|
//获取工作线程ID
|
|||
|
|
DWORD GetWorkThreadId();
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
//覆盖连接已经建立的函数
|
|||
|
|
VOID Connected();
|
|||
|
|
//覆盖断开连接的处理函数
|
|||
|
|
VOID Disconnected();
|
|||
|
|
//覆盖套接字错误的函数
|
|||
|
|
VOID SocketError(INT errorCode);
|
|||
|
|
|
|||
|
|
virtual void OnRountine() ; //定时调用
|
|||
|
|
|
|||
|
|
virtual void OnThreadStarted();
|
|||
|
|
|
|||
|
|
virtual void OnTerminated();
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
//客户端连接处理线程例行函数
|
|||
|
|
//static VOID STDCALL CustomClientSocketWorkRoutine(CCustomClientSocket *lpClient);
|
|||
|
|
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
TCHAR m_sSrvHost[256]; //服务器地址
|
|||
|
|
INT_PTR m_nSrvPort; //服务器端口
|
|||
|
|
TCHAR m_sClientName[256]; //客户端名称
|
|||
|
|
|
|||
|
|
//volatile LONG m_boStoped; //是否标记为停止
|
|||
|
|
|
|||
|
|
//THREAD_HANDLE m_hThread;
|
|||
|
|
//DWORD m_dwThreadId; //工作线程ID
|
|||
|
|
|
|||
|
|
//HANDLE m_hThread; //工作线程句柄
|
|||
|
|
|
|||
|
|
|
|||
|
|
TICKCOUNT m_dwReconnectTick; //重新连接服务器的时间
|
|||
|
|
TICKCOUNT m_dwCheckMemoryTick; //检测内存的时间
|
|||
|
|
|
|||
|
|
LOOPPERFORMANCE m_LoopPerformance; //数据处理主循环性能统计
|
|||
|
|
PERFORMANCEINFO m_MainProcPerformance; //主循环性能统计
|
|||
|
|
PERFORMANCEINFO m_MainSleepPerformance; //主循休眠状态统计
|
|||
|
|
bool m_bNeedCheckMemory; //是否需要定期检测内存
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|