CSerialVerification::CSerialVerification ( CPlayer* pPlayer, SERIALVERIFICATIONCALLBACK pCallBack ) { char buf[32] = {0}; CLogger::LogPrintf ( "VERIFY: Querying %s\n", SERIAL_VERIFICATION_SERVER ); m_pCallBack = pCallBack; m_pPlayer = pPlayer; m_ulStartTime = GetTickCount(); m_bFinished = false; if ( pPlayer->GetSerialUser().length() > 0 && pPlayer->GetSerial().length() > 0 ) { // Create the POST URL std::string strPostData = "[\"" + pPlayer->GetSerialUser () + "\",\"" + pPlayer->GetSerial () + "\"," + itoa ( g_pGame->GetConfig ()->GetServerPort (), buf, 10 ) + "]"; // Use CURL to perform the POST CNetHTTPDownloadManagerInterface * pHTTP = g_pNetServer->GetHTTPDownloadManager (); pHTTP->QueueFile ( SERIAL_VERIFICATION_URL, NULL, 0, strPostData.c_str (), this, ProgressCallback ); if ( !pHTTP->IsDownloading () ) pHTTP->StartDownloadingQueuedFiles (); } else { m_pCallBack ( m_pPlayer, false, szSerialErrorMessages[SERIAL_ERROR_INVALID_ACCOUNT] ); m_bFinished = true; } }
void CSerialVerification::DoPulse ( void ) { if ( GetTickCount() > m_ulStartTime + SERIAL_VERIFICATION_TIMEOUT && !m_bFinished ) { m_pCallBack ( m_pPlayer, true, NULL ); m_bFinished = true; } }
//============================================================================= // OnRelayMessage //============================================================================= LRESULT CUtilityWindow::OnRelayMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) { if (m_hCallbackWnd) { ::PostMessage(m_hCallbackWnd, uMsg, wParam, lParam); } else if (m_pCallBack) { m_pCallBack(uMsg, m_lParam1, m_lParam2); } return S_OK; }
void SlotManager::ProcessMouseEvent(ALLEGRO_MOUSE_EVENT * mouse_event) { int index = -1; for (size_t i=0; i< m_vSlots.size(); i++ ) { m_vSlots[i].ProcessMouseEvent(mouse_event); } if ((m_blLoading)&&(m_pActiveSlot!=NULL)&&(m_pCallBack!=NULL)) { m_pCallBack(m_pActiveSlot->GetCaption()); } }
DWORD CRtspClientSession::RecvThread(LPVOID lpParam) { HANDLE m_hMutihandle[2] = {m_hExitEvent,m_hRecvEvent}; char request[RTSP_BUFFER_SIZE] = {0}; char response[RTSP_BUFFER_SIZE] = {0}; int bytesCount = 0; while(1) { switch(WaitForMultipleObjects(2,m_hMutihandle,FALSE,INFINITE)) { case WAIT_OBJECT_0: ResetEvent(m_hExitEvent); closesocket(m_RecvSocket); m_RecvSocket = NULL; return 0; case WAIT_OBJECT_0+1: WSAResetEvent(m_hRecvEvent); bytesCount = recv(m_RecvSocket,request,RTSP_BUFFER_SIZE,0); if (bytesCount <1) break; pSessionMsg pMsg = new SessionMsg(); pMsg->addrClient = addrClient; pMsg->byteCount = bytesCount; memcpy(pMsg->request ,request,bytesCount); pMsg->SendSocket = m_RecvSocket; pMsg->sessionID = m_nSessionID; m_pCallBack(pMsg,m_lpRtspServer); #ifdef DEBUG_TEST cout<<"get request "<<endl; cout<<request<<endl; #endif break; } } return 0; }
void ConCommand::Call(std::vector<gcString> &vArgList) { if (m_pCallBack) m_pCallBack(vArgList); }
void CRTPRecv::HandleRTPData( RTPPacket *pPacket ) { //获取RTP负载类型,如果不是H264直接返回 if (pPacket->GetPayloadType()!=H264) { LOG_DEBUG("RTP Recv error Data, payload type is " << pPacket->GetPayloadType()); return; } LOG_DEBUG("squence is " << pPacket->GetSequenceNumber() << ", length is " << pPacket->GetPayloadLength()); // unsigned long timestamp=0; unsigned char *pData=NULL; int Length=0; //解析数据 timestamp=pPacket->GetTimestamp(); pData = pPacket->GetPayloadData(); Length = pPacket->GetPayloadLength(); //解析Header NALU_HEADER *pHeader = reinterpret_cast<NALU_HEADER*>(&pData[0]); /*//帧分界符 if (H264_PACKET_END == pHeader->TYPE) { try { if(m_pCallBack!=NULL) { m_pCallBack(FrameType,Buffer,m_BufLen,m_pContext); } else { LOG_WARN("Frame CallBack is NULL"); } } catch (...) { LOG_ERROR("Call Frame callback error"); } m_BufLen=0; m_FirstNal=true; return; }*/ if (NALU_TYPE_FU_A!=pHeader->TYPE) { //单包 //解析BitStream H264_BitStream *pBitStream = reinterpret_cast<H264_BitStream*>(&pData[1]); //如果是PPS sps 不对 H264 bit stream 进行判断 if (pHeader->TYPE==EN_H264_NALU_TYPE::PPS||pHeader->TYPE==EN_H264_NALU_TYPE::SPS) { m_FrameType = pHeader->TYPE; //单帧首个nal m_Buf[m_BufLen]=0; m_Buf[m_BufLen+1]=0; m_Buf[m_BufLen+2]=0; m_Buf[m_BufLen+3]=1; m_BufLen+=4; } else if (EN_H264_NALU_TYPE::SEI==pHeader->TYPE) { m_FrameType = pHeader->TYPE; m_Buf[m_BufLen]=0; m_Buf[m_BufLen+1]=0; m_Buf[m_BufLen+2]=1; m_BufLen+=3; } //判断是否是帧的第一个宏块 else if (pBitStream->GetFirstMBInSlice()) { if (0!=m_BufLen) { //把之前的Nalu返回 m_pCallBack(m_FrameType,m_Buf,m_BufLen,m_pContext); m_BufLen=0; } //判断接下来的帧类型 if (pBitStream->isIFrame()) { m_FrameType=EN_FrameType::I_FRAME; } else { m_FrameType==EN_FrameType::P_FRAME; } //单帧首个nal m_Buf[m_BufLen]=0; m_Buf[m_BufLen+1]=0; m_Buf[m_BufLen+2]=0; m_Buf[m_BufLen+3]=1; m_BufLen+=4; } else { m_Buf[m_BufLen]=0; m_Buf[m_BufLen+1]=0; m_Buf[m_BufLen+2]=1; m_BufLen+=3; } memcpy(m_Buf+m_BufLen,pData,Length); m_BufLen+=Length; } else { //分片 //解析FU头 FU_HEADER *pFUHeader = reinterpret_cast<FU_HEADER*>(&pData[1]); if (pFUHeader->S) { //解析BitStream H264_BitStream *pBitStream = reinterpret_cast<H264_BitStream*>(&pData[2]); if (pBitStream->GetFirstMBInSlice()) { //如果上一帧是SPS PPS SEI, 后面紧跟的是内容 if (m_FrameType==EN_H264_NALU_TYPE::SPS||m_FrameType==EN_H264_NALU_TYPE::PPS||m_FrameType==EN_H264_NALU_TYPE::SEI) { m_Buf[m_BufLen]=0; m_Buf[m_BufLen+1]=0; m_Buf[m_BufLen+2]=1; m_BufLen+=3; } else { if (0!=m_BufLen) { //把之前的Nalu返回 m_pCallBack(m_FrameType,m_Buf,m_BufLen,m_pContext); m_BufLen=0; } m_Buf[m_BufLen]=0; m_Buf[m_BufLen+1]=0; m_Buf[m_BufLen+2]=0; m_Buf[m_BufLen+3]=1; m_BufLen+=4; } } else { m_Buf[m_BufLen]=0; m_Buf[m_BufLen+1]=0; m_Buf[m_BufLen+2]=1; m_BufLen+=3; } //填写Nalu头 NALU_HEADER *pNaluHeader = reinterpret_cast<NALU_HEADER*>(m_Buf+m_BufLen); memcpy(pNaluHeader,pData,1); if (pBitStream->isIFrame()) { pNaluHeader->TYPE=5; } else { pNaluHeader->TYPE=1; } m_BufLen+=1; //视频数据 memcpy(m_Buf+m_BufLen,pData+2,Length-2); m_BufLen+=Length-2; } else if (pFUHeader->E) { //分片最后一个包 memcpy(m_Buf+m_BufLen,pData+2,Length-2); m_BufLen+=Length-2; } else { //分片中间包 memcpy(m_Buf+m_BufLen,pData+2,Length-2); m_BufLen+=Length-2; } } }