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;
}
Exemple #4
0
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;
}
Exemple #6
0
void ConCommand::Call(std::vector<gcString> &vArgList)
{
	if (m_pCallBack)
		m_pCallBack(vArgList);
}
Exemple #7
0
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;
		}
	}
	
}