+++ /dev/null
-// 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
-//\r
-//////////////////////////////////////////////////////////////////////\r
-\r
-\r
-#include "CasServer.h"\r
-#include "BCasCard.h"\r
-\r
-#define FALSE 0
-#define TRUE 1\r
-\r
-CCasServer::CCasServer(ICasServerHandler *pEventHandler)\r
- : m_pEventHandler(pEventHandler)\r
- , m_hServerThread(NULL)\r
-{\r
-\r
-}\r
-\r
-CCasServer::~CCasServer(void)\r
-{\r
- CloseServer();\r
-}\r
-\r
-const BOOL CCasServer::OpenServer(const WORD wServerPort)\r
-{\r
- // \83J\81[\83h\83\8a\81[\83_\91¶\8dÝ\83`\83F\83b\83N\r
- CBcasCard BCasCard;\r
- if(!BCasCard.OpenCard())return FALSE;\r
-\r
- // \83T\81[\83o\83\\83P\83b\83g\83I\81[\83v\83\93\r
- if(!m_pSocket.Listen(wServerPort))return FALSE;\r
-\r
- // \83T\81[\83o\83X\83\8c\83b\83h\8bN\93®\r
- pthread_create(&m_hServerThread, NULL, CCasServer::ServerThreadRaw, (LPVOID)this);\r
- if(!m_hServerThread){\r
- m_pSocket.Close();\r
- return FALSE;\r
- }\r
-\r
- return TRUE;\r
-}\r
-\r
-void CCasServer::CloseServer(void)\r
-{\r
- // \83T\81[\83o\83\\83P\83b\83g\83N\83\8d\81[\83Y\r
- m_pSocket.Close();\r
-\r
- // \83X\83\8c\83b\83h\83n\83\93\83h\83\8b\8aJ\95ú\r
- if(m_hServerThread){\r
- pthread_join(m_hServerThread, NULL);\r
- m_hServerThread = NULL;\r
- }\r
-\r
- // \91S\83N\83\89\83C\83A\83\93\83g\90Ø\92f\r
- m_Lock.Lock();\r
- \r
- for(ClientList::iterator It = m_ClientList.begin() ; It != m_ClientList.end() ; It++){\r
- It->first->CloseClient();\r
- }\r
-\r
- m_Lock.Unlock();\r
- \r
- // \91S\83N\83\89\83C\83A\83\93\83g\82Ì\8fI\97¹\82ð\91Ò\82Â\r
- while(m_ClientList.size()) sleep(1UL);\r
-}\r
-\r
-const DWORD CCasServer::GetClientNum(void) const\r
-{\r
- // \90Ú\91±\92\86\82Ì\83N\83\89\83C\83A\83\93\83g\90\94\82ð\95Ô\82·\r
- return m_ClientList.size();\r
-}\r
-\r
-void CCasServer::OnCasClientEvent(CCasClient *pClient, const DWORD dwEventID, PVOID pParam)\r
-{\r
- CBlockLock AutoLock(&m_Lock);\r
-\r
- // \83N\83\89\83C\83A\83\93\83g\83C\83x\83\93\83g\r
- switch(dwEventID){\r
- case CCasClient::EID_CONNECTED :\r
- // \83\8a\83X\83g\82É\92Ç\89Á\r
- m_ClientList[pClient] = pClient;\r
- if (m_pEventHandler) m_pEventHandler->OnCasServerEvent(this, CSEI_CONNECTED);\r
- break;\r
- \r
- case CCasClient::EID_DISCONNECTED :\r
- // \83\8a\83X\83g\82©\82ç\8dí\8f\9c\r
- m_ClientList.erase(pClient);\r
- if (m_pEventHandler) m_pEventHandler->OnCasServerEvent(this, CSEI_DISCONNECTED);\r
- break;\r
- }\r
-}\r
-\r
-void CCasServer::ServerThread(void)\r
-{\r
- // \83A\83N\83Z\83v\83g\83\8b\81[\83v\r
- CSmartSock *pNewSocket;\r
- \r
- while(pNewSocket = m_pSocket.Accept()){\r
- // \83N\83\89\83C\83A\83\93\83g\83C\83\93\83X\83^\83\93\83X\90¶\90¬\r
- new CCasClient(this, pNewSocket);\r
- }\r
-}\r
-\r
-void* CCasServer::ServerThreadRaw(LPVOID pParam)\r
-{\r
- // \83T\81[\83o\83X\83\8c\83b\83h\r
- static_cast<CCasServer *>(pParam)->ServerThread();\r
-\r
- return 0UL;\r
-}\r