+++ /dev/null
-// CasClient.cpp: CCasClient \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
-#include <stdio.h>\r
-#include "W2L.h"\r
-#include "CasClient.h"
-\r
-\r
-#define TCP_TIMEOUT 1000UL // 1\95b\r
-\r
-\r
-CCasClient::CCasClient(ICasClientHandler *pEventHandler, CSmartSock *pSocket)\r
- : CBcasCard()\r
- , m_pSocket(pSocket)\r
- , m_pEventHandler(pEventHandler)\r
- , m_hClientThread(NULL)\r
-{\r
- // \83N\83\89\83C\83A\83\93\83g\83X\83\8c\83b\83h\8bN\93®\r
- pthread_create(&m_hClientThread, NULL, CCasClient::ClientThreadRaw, (LPVOID)this);\r
- if(!m_hClientThread){\r
- printf("ClientThread failed\n");
- delete this;\r
- }\r
- printf("ClientThread started\n");
-}\r
-\r
-CCasClient::~CCasClient(void)\r
-{\r
- delete m_pSocket;\r
- if (m_hClientThread) pthread_join(m_hClientThread, NULL);\r
-}\r
-\r
-void CCasClient::CloseClient(void)\r
-{\r
- // \83N\83\89\83C\83A\83\93\83g\82ð\90Ø\92f\82·\82é\r
- m_pSocket->Close();\r
-}\r
-\r
-void CCasClient::ClientThread(void)\r
-{\r
- // \83J\81[\83h\83\8a\81[\83_\82ð\8aJ\82\r
- if(!OpenCard())return;\r
- \r
- // \8eó\90M\83o\83b\83t\83@\r
- BYTE byDataLen;\r
- BYTE RecvBuf[256];\r
- DWORD dwRecvSize;\r
- \r
- // \83\81\83b\83Z\81[\83W\8eó\90M\83\8b\81[\83v\r
- while(1){\r
- // \83w\83b\83_\82ð\8eó\90M\r
- if(!m_pSocket->Recv(&byDataLen, 1UL, TCP_TIMEOUT)){\r
- if(m_pSocket->GetLastError() == CSmartSock::EC_TIMEOUT)continue;\r
- else break;\r
- }
-\r
- // \83f\81[\83^\82ð\8eó\90M\r
- if(!m_pSocket->Recv(RecvBuf, byDataLen, TCP_TIMEOUT))break;
- \r
- // \83J\81[\83h\91\97\8eó\90M\r
- if(!TransmitCommand(RecvBuf, byDataLen, &RecvBuf[1], sizeof(RecvBuf) - 1UL, &dwRecvSize))dwRecvSize = 0UL;
-\r
- // \83f\81[\83^\82ð\91\97\90M\r
- RecvBuf[0] = (BYTE)dwRecvSize;\r
- if(!m_pSocket->Send(RecvBuf, dwRecvSize + 1UL, TCP_TIMEOUT))break;
- }\r
-\r
- printf("ClientThread exited\n");
- // \83J\81[\83h\83\8a\81[\83_\82ð\95Â\82¶\82é\r
- CloseCard();\r
-}\r
-\r
-void* CCasClient::ClientThreadRaw(LPVOID pParam)\r
-{\r
- // \83N\83\89\83C\83A\83\93\83g\83X\83\8c\83b\83h\r
- CCasClient *pThis = static_cast<CCasClient *>(pParam);\r
-\r
- // \90Ú\91±\83C\83x\83\93\83g\92Ê\92m\r
- pThis->SendEvent(EID_CONNECTED);
-\r
- // \83\81\83\93\83o\8aÖ\90\94\82É\83\8a\83_\83C\83\8c\83N\83g\82·\82é\r
- pThis->ClientThread();
-\r
- // \90Ø\92f\83C\83x\83\93\83g\92Ê\92m\r
- pThis->SendEvent(EID_DISCONNECTED);
-\r
- delete pThis;
-\r
- return 0UL;\r
-}\r
-\r
-void CCasClient::SendEvent(const DWORD dwEventID, PVOID pParam)\r
-{\r
- // \83n\83\93\83h\83\89\82É\83C\83x\83\93\83g\82ð\92Ê\92m\82·\82é\r
- if(m_pEventHandler)m_pEventHandler->OnCasClientEvent(this, dwEventID, pParam);\r
-}\r