Files
mir_server/Gateway/srvlib/include/net/asyn_client_socket.h
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

84 lines
1.7 KiB
C++

#ifndef _ASYN_CLIENT_SOCKET_H_
#define _ASYN_CLIENT_SOCKET_H_
using namespace tick64;
using namespace container;
using namespace lock;
class AsynClientSocket :
public AsynWorkSocket
{
public:
typedef AsynWorkSocket Inherited;
public:
AsynClientSocket(const char* name);
virtual ~AsynClientSocket();
inline const char* GetClientName()
{
return client_name_;
};
inline const char* GetHost()
{
return host_;
}
void SetHost(const char* sHost);
inline int GetPort()
{
return port_;
}
void SetPort(const int nPort);
bool Startup();
void Stop();
//unsigned long GetThreadId()
//{
// return thread_id_;
//}
protected:
virtual void OnWorkThreadStart();
virtual void OnWorkThreadStop();
virtual int GetLocalServerType() = 0;
virtual const char* GetLocalServerName() = 0;
virtual int GetLocalServerIndex();
void SendRegisteClient();
protected:
void SetClientName(const char* sClientName);
bool ConnectToServer();
void SingleRun();
protected:
void Connected();
void Disconnected();
void SocketError(int errorCode);
private:
#ifdef _MSC_VER
HANDLE handle_; //工作线程句柄
HANDLE recv_handle_;
unsigned long thread_id_; //线程ID
unsigned long recv_thread_id_; //线程ID
static void STDCALL Work_R(AsynClientSocket* client);
static void STDCALL Recv_R(AsynClientSocket* client);
#else
pthread_t thread_id_;
pthread_t recv_thread_id_;
static void* Work_R(void* client);
static void* Recv_R(void* client);
#endif
bool stoped_; //是否标记为停止
bool recv_stoped_; //是否标记为停止
bool exit_;
bool recv_exit_;
char host_[256]; //服务器地址
u_long addr_;
int port_; //服务器端口
char client_name_[256]; //客户端名称
time_t reconn_t_; //重新连接服务器的时间
};
#endif