1 // CasServer.cpp: CCasServer
\83N
\83\89\83X
\82Ì
\83C
\83\93\83v
\83\8a\83\81\83\93\83e
\81[
\83V
\83\87\83\93\r
3 //////////////////////////////////////////////////////////////////////
\r
6 #include "CasServer.h"
\r
7 #include "BCasCard.h"
\r
12 CCasServer::CCasServer(ICasServerHandler *pEventHandler)
\r
13 : m_pEventHandler(pEventHandler)
\r
14 , m_hServerThread(NULL)
\r
19 CCasServer::~CCasServer(void)
\r
24 const BOOL CCasServer::OpenServer(const WORD wServerPort)
\r
26 //
\83J
\81[
\83h
\83\8a\81[
\83_
\91¶
\8dÝ
\83`
\83F
\83b
\83N
\r
28 if(!BCasCard.OpenCard())return FALSE;
\r
30 //
\83T
\81[
\83o
\83\
\83P
\83b
\83g
\83I
\81[
\83v
\83\93\r
31 if(!m_pSocket.Listen(wServerPort))return FALSE;
\r
33 //
\83T
\81[
\83o
\83X
\83\8c\83b
\83h
\8bN
\93®
\r
34 pthread_create(&m_hServerThread, NULL, CCasServer::ServerThreadRaw, (LPVOID)this);
\r
35 if(!m_hServerThread){
\r
43 void CCasServer::CloseServer(void)
\r
45 //
\83T
\81[
\83o
\83\
\83P
\83b
\83g
\83N
\83\8d\81[
\83Y
\r
48 //
\83X
\83\8c\83b
\83h
\83n
\83\93\83h
\83\8b\8aJ
\95ú
\r
49 if(m_hServerThread){
\r
50 pthread_join(m_hServerThread, NULL);
\r
51 m_hServerThread = NULL;
\r
54 //
\91S
\83N
\83\89\83C
\83A
\83\93\83g
\90Ø
\92f
\r
57 for(ClientList::iterator It = m_ClientList.begin() ; It != m_ClientList.end() ; It++){
\r
58 It->first->CloseClient();
\r
63 //
\91S
\83N
\83\89\83C
\83A
\83\93\83g
\82Ì
\8fI
\97¹
\82ð
\91Ò
\82Â
\r
64 while(m_ClientList.size()) sleep(1UL);
\r
67 const DWORD CCasServer::GetClientNum(void) const
\r
69 //
\90Ú
\91±
\92\86\82Ì
\83N
\83\89\83C
\83A
\83\93\83g
\90\94\82ð
\95Ô
\82·
\r
70 return m_ClientList.size();
\r
73 void CCasServer::OnCasClientEvent(CCasClient *pClient, const DWORD dwEventID, PVOID pParam)
\r
75 CBlockLock AutoLock(&m_Lock);
\r
77 //
\83N
\83\89\83C
\83A
\83\93\83g
\83C
\83x
\83\93\83g
\r
79 case CCasClient::EID_CONNECTED :
\r
80 //
\83\8a\83X
\83g
\82É
\92Ç
\89Á
\r
81 m_ClientList[pClient] = pClient;
\r
82 if (m_pEventHandler) m_pEventHandler->OnCasServerEvent(this, CSEI_CONNECTED);
\r
85 case CCasClient::EID_DISCONNECTED :
\r
86 //
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c\r
87 m_ClientList.erase(pClient);
\r
88 if (m_pEventHandler) m_pEventHandler->OnCasServerEvent(this, CSEI_DISCONNECTED);
\r
93 void CCasServer::ServerThread(void)
\r
95 //
\83A
\83N
\83Z
\83v
\83g
\83\8b\81[
\83v
\r
96 CSmartSock *pNewSocket;
\r
98 while(pNewSocket = m_pSocket.Accept()){
\r
99 //
\83N
\83\89\83C
\83A
\83\93\83g
\83C
\83\93\83X
\83^
\83\93\83X
\90¶
\90¬
\r
100 new CCasClient(this, pNewSocket);
\r
104 void* CCasServer::ServerThreadRaw(LPVOID pParam)
\r
106 //
\83T
\81[
\83o
\83X
\83\8c\83b
\83h
\r
107 static_cast<CCasServer *>(pParam)->ServerThread();
\r