88 lines
2.0 KiB
C
88 lines
2.0 KiB
C
|
|
#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
|
|||
|
|
|