Files
mir_server/Gateway/srvlib/include/net/server_socket.h

88 lines
2.0 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#ifndef _SERVER_SOCKET_H_
#define _SERVER_SOCKET_H_
class NetSession;
class ServerSocket
: public WorkSocket
{
public:
typedef WorkSocket Inherited;
private:
#ifdef _MSC_VER
static void STDCALL ServerSocketAcceptThreadRoutine(ServerSocket* srv);
static void STDCALL ServerSocketDataThreadRoutine(ServerSocket* srv);
#else
static void* ServerSocketAcceptThreadRoutine(void* srv);
static void* ServerSocketDataThreadRoutine(void* srv);
#endif
protected:
virtual NetSession* NewSession(SOCKET nSocket, sockaddr_in* pAddrIn) = 0;
virtual void DestroySession(NetSession* client);
protected:
virtual void OnServerStart();
virtual void OnServerStop();
virtual void OnClientConnect(NetSession* pClientSocke);
protected:
virtual bool DoStartup();
virtual void DoStop();
virtual void ProcessClients();
virtual void CloseAllClients();
public:
ServerSocket(const char* name);
~ServerSocket();
void SetServiceName(const char* sName);
void SetServiceHost(const char* sHost);
void SetServicePort(const int nPort);
bool Startup();
void Stop();
void SingleRun();
inline const char* GetServiceName()
{
return server_name_;
}
inline const char* GetServiceHost()
{
return host_;
}
inline int GetServicePort()
{
return port_;
}
inline bool Started()
{
return !srv_stoped_;
}
private:
#ifdef _MSC_VER
HANDLE accept_thread_; //<2F><><EFBFBD>ܿͻ<DCBF><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
HANDLE client_thread_; //<2F>ͻ<EFBFBD><CDBB><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>߳<EFBFBD>
#else
pthread_t accept_thread_;
pthread_t client_thread_;
#endif
bool srv_stoped_; //<2F>Ƿ<EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
bool accept_stoped_; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵĹ<D3B5><C4B9><EFBFBD><EFBFBD>߳<EFBFBD><DFB3>Ƿ<EFBFBD><C7B7>Ѿ<EFBFBD>ֹͣ<CDA3>ı<EFBFBD><C4B1><EFBFBD>*<2A><><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD>߳<EFBFBD>
bool srv_exit_; // <20><><EFBFBD><EFBFBD><EFBFBD>߳̽<DFB3><CCBD><EFBFBD><EFBFBD>ı<EFBFBD>־
bool accept_exit_;// <20><><EFBFBD><EFBFBD><EFBFBD>߳̽<DFB3><CCBD><EFBFBD><EFBFBD>ı<EFBFBD>־
char server_name_[256]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char host_[256]; //<2F><><EFBFBD><EFBFBD><EFBFBD>󶨵<EFBFBD>ַ
u_long addr_;
int port_; //<2F><><EFBFBD><EFBFBD><EFBFBD>󶨶˿<F3B6A8B6>
protected:
QueueList<NetSession*> session_list_;//<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD>б<EFBFBD>
Mutex session_lock_; //<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
};
#endif