1 // CasServer.cpp: CCasServer クラスのインプリメンテーション
3 //////////////////////////////////////////////////////////////////////
12 CCasServer::CCasServer(ICasServerHandler *pEventHandler)
13 : m_pEventHandler(pEventHandler)
14 , m_hServerThread(NULL)
19 CCasServer::~CCasServer(void)
24 const BOOL CCasServer::OpenServer(const WORD wServerPort)
28 if(!BCasCard.OpenCard())return FALSE;
31 if(!m_pSocket.Listen(wServerPort))return FALSE;
34 pthread_create(&m_hServerThread, NULL, CCasServer::ServerThreadRaw, (LPVOID)this);
43 void CCasServer::CloseServer(void)
50 pthread_join(m_hServerThread, NULL);
51 m_hServerThread = NULL;
57 for(ClientList::iterator It = m_ClientList.begin() ; It != m_ClientList.end() ; It++){
58 It->first->CloseClient();
64 while(m_ClientList.size()) sleep(1UL);
67 const DWORD CCasServer::GetClientNum(void) const
70 return m_ClientList.size();
73 void CCasServer::OnCasClientEvent(CCasClient *pClient, const DWORD dwEventID, PVOID pParam)
75 CBlockLock AutoLock(&m_Lock);
79 case CCasClient::EID_CONNECTED :
81 m_ClientList[pClient] = pClient;
82 if (m_pEventHandler) m_pEventHandler->OnCasServerEvent(this, CSEI_CONNECTED);
85 case CCasClient::EID_DISCONNECTED :
87 m_ClientList.erase(pClient);
88 if (m_pEventHandler) m_pEventHandler->OnCasServerEvent(this, CSEI_DISCONNECTED);
93 void CCasServer::ServerThread(void)
96 CSmartSock *pNewSocket;
98 while(pNewSocket = m_pSocket.Accept()){
100 new CCasClient(this, pNewSocket);
104 void* CCasServer::ServerThreadRaw(LPVOID pParam)
107 static_cast<CCasServer *>(pParam)->ServerThread();