1 // CasClient.cpp: CCasClient クラスのインプリメンテーション
3 //////////////////////////////////////////////////////////////////////
10 #define TCP_TIMEOUT 1000UL // 1秒
13 CCasClient::CCasClient(ICasClientHandler *pEventHandler, CSmartSock *pSocket)
16 , m_pEventHandler(pEventHandler)
17 , m_hClientThread(NULL)
20 pthread_create(&m_hClientThread, NULL, CCasClient::ClientThreadRaw, (LPVOID)this);
22 printf("ClientThread failed\n");
25 pthread_detach(m_hClientThread);
26 printf("ClientThread started\n");
29 CCasClient::~CCasClient(void)
32 if (m_hClientThread) pthread_join(m_hClientThread, NULL);
35 void CCasClient::CloseClient(void)
41 void CCasClient::ClientThread(void)
44 if(!OpenCard())return;
54 if(!m_pSocket->Recv(&byDataLen, 1UL, TCP_TIMEOUT)){
55 if(m_pSocket->GetLastError() == CSmartSock::EC_TIMEOUT)continue;
60 if(!m_pSocket->Recv(RecvBuf, byDataLen, TCP_TIMEOUT))break;
63 if(!TransmitCommand(RecvBuf, byDataLen, &RecvBuf[1], sizeof(RecvBuf) - 1UL, &dwRecvSize))dwRecvSize = 0UL;
66 RecvBuf[0] = (BYTE)dwRecvSize;
67 if(!m_pSocket->Send(RecvBuf, dwRecvSize + 1UL, TCP_TIMEOUT))break;
70 printf("ClientThread exited\n");
75 void* CCasClient::ClientThreadRaw(LPVOID pParam)
78 CCasClient *pThis = static_cast<CCasClient *>(pParam);
81 pThis->SendEvent(EID_CONNECTED);
84 pThis->ClientThread();
87 pThis->SendEvent(EID_DISCONNECTED);
94 void CCasClient::SendEvent(const DWORD dwEventID, PVOID pParam)
97 if(m_pEventHandler)m_pEventHandler->OnCasClientEvent(this, dwEventID, pParam);