예제 #1
0
void CJorFileReader::OnWork()
{
	int nRet = J_OK;
	J_StreamHeader streamHeader;
	char *pBuffer = new char[1024 * 1024 * 5];
	int nfd = 0;
	while (m_bRun)
	{
		if (m_lastTime == 0)
		{
			TLock(m_mux);
			m_cond.Wait(m_mux);
			//m_jorHelper.ReadFile(m_recvSocket, m_resid.c_str(), 0, 2*60*1000);
			//m_lastTime += 2*60*1000;
			//nfd = m_recvSocket->GetHandle();
			TUnlock(m_mux);
		}
		if (m_buffer->GetIdleLength() != RECORD_BUFF_SIZE)
		{
			j_sleep(10);
			continue;
		}

		TLock(m_locker);
		J_DataHead head = {0};
		j_sleep(39);
		int	nLen = m_recvSocket->Read_n((char *)&head, sizeof(head));
		if (nLen < 0)
		{
			J_OS::LOGERROR("CJorFileReader::OnRead recv data error");
			//TUnlock(m_locker);
			//return J_SOCKET_ERROR;
			//未处理
			m_bRun = false;
			TUnlock(m_locker);
			break;
		}
		int nLength = ntohl(head.data_len);
		nLen = m_recvSocket->Read_n(pBuffer, nLength);
		if (nLen > 0)
		{
			int nRet = 0;
			J_StreamHeader streamHeader = {0};
			streamHeader.timeStamp = ntohll(head.time_stamp);
			streamHeader.frameType = ntohl(head.frame_type);
			streamHeader.dataLen = nLength;
			streamHeader.frameNum = ntohl(head.frame_seq);
			if (nRet == J_OK)
			{
				m_buffer->PushBuffer(pBuffer, streamHeader);
				m_lastTime -= 40;
			}
		}
		TUnlock(m_locker);
	}
	delete pBuffer;
}
예제 #2
0
void CBroadCastListener::OnWork()
{
	//BroadCastFtpInfo info = {0};
	//strcpy(info.ftp_addr, "127.0.0.1");
	//info.ftp_port = 8504;
	//strcpy(info.host_id, "111");
	//strcpy(info.user_name, "joo");
	//strcpy(info.pass_word, "1");
	//JoHostManager->UpdateHostInfo(info);
	SOCKADDR_IN	sockAddrInClient = {0};
	int iAddrLen = sizeof(sockAddrInClient);
	int nSockAddrSize;
	int nRecvSize;
	while(m_bStart)
	{
		nSockAddrSize = sizeof ( SOCKADDR_IN );
		memset (&sockAddrInClient, 0, sizeof(sockAddrInClient));
		memset (m_recvBuff, 0, sizeof(sockAddrInClient));
		nRecvSize = recvfrom (m_broadCastListener, m_recvBuff, 1400, 0, (SOCKADDR FAR *) &sockAddrInClient, &nSockAddrSize);
		if(nRecvSize == SOCKET_ERROR)
		{
			j_sleep(1000);
			continue;
		}
		else
		{
			BroadCastFtpInfo *pInfo = (BroadCastFtpInfo *)m_recvBuff;
			//J_OS::LOGINFO("BroadCast Recive %s ", pInfo->host_id);
			JoHostManager->UpdateHostInfo(*pInfo);
		}
	}
}
예제 #3
0
void CHikRemoteReader::OnRecvData(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize)
{
	if (dwDataType == 2)
	{
		J_StreamHeader streamHeader;
		m_parser.InputData((const char *)pBuffer, dwBufSize);
		j_result_t nResult = m_parser.GetOnePacket(m_pDataBuff, streamHeader);
		while (nResult == J_OK)
		{
			//J_OS::LOGINFO("%d %d", streamHeader.dataLen, m_ringBuffer.GetIdleLength());
			streamHeader.timeStamp = m_startTime;
			m_startTime += 20;
			m_ringBuffer.PushBuffer(m_pDataBuff, streamHeader);
			nResult = m_parser.GetOnePacket(m_pDataBuff, streamHeader);
			j_sleep(20);
		}
	}
}
예제 #4
0
CNvrFileReader::~CNvrFileReader()
{
	m_bRun = false;
	m_thread.Release();
	j_sleep(1000);
	
	J_OS::LOGINFO("CNvrFileReader::~CloseFile");
	TLock(m_locker);
	if (m_buffer != NULL)
		delete m_buffer;
	if (m_pBuffer != NULL)
		delete m_pBuffer;
	J_OS::LOGINFO("CNvrFileReader::Lock(m_locker)");
	CloseFile();
	J_OS::LOGINFO("CNvrFileReader::TUnlock(m_locker)");
	TUnlock(m_locker);
	//m_timer.Destroy();
	J_OS::LOGINFO("CNvrFileReader::~CNvrFileReader");
}
예제 #5
0
void CNvrFileReader::OnWork()
{
	int nRet = J_OK;
	J_StreamHeader streamHeader;
	while (m_bRun)
	{
		if (m_lastTime == 0)
		{
			/*TLock(m_mux);
			if (m_cond.TimeWait(m_mux, 1, 0) < 0)
			{
				streamHeader.dataLen = 0;
				streamHeader.frameType = jo_file_end;
				streamHeader.timeStamp = 0;
				streamHeader.frameNum = 0;
				m_buffer->PushBuffer(m_pBuffer, streamHeader);
				TUnlock(m_mux);
				return;
			}
			TUnlock(m_mux);*/
			j_sleep(1);
			continue;
		}
		if (m_buffer->GetIdleLength() != RECORD_BUFF_SIZE)
		{
			j_sleep(1);
			continue;
		}
		//J_OS::LOGINFO("1");
		TLock(m_locker);
		//J_OS::LOGINFO("2");
		if (m_pFileId == NULL || ftell(m_pFileId) >= m_fileEnd)
		{
			nRet = OpenFile();
			if (nRet != J_OK)
			{
				//未处理
				J_OS::LOGINFO("CNvrFileReader::OnWork() error %d", nRet);
				m_bRun = false;
				//J_OS::LOGINFO("3");
				TUnlock(m_locker);
				//J_OS::LOGINFO("4");
				break;
			}
		}

		int nReadLen = 0;
		if (m_bGoNext)
		{
			nReadLen = fread(&m_nextHeader, 1, sizeof(m_nextHeader), m_pFileId);
			if (nReadLen == 0)
			{
				//J_OS::LOGINFO("5");
				TUnlock(m_locker);
				//J_OS::LOGINFO("6");
				continue;
			}
			m_bGoNext = false;
		}

		if (m_nextTimeStamp != 0
				&& m_nextHeader.timeStamp > m_nextTimeStamp
				&& m_nextHeader.timeStamp - m_nextTimeStamp > 120000)
		{
			//未处理
			streamHeader.dataLen = 0;
			streamHeader.frameType = jo_file_end;
			streamHeader.timeStamp = 0;
			streamHeader.frameNum = 0;
		}
		m_nextTimeStamp = m_nextHeader.timeStamp;
		streamHeader = m_nextHeader;
		nReadLen = fread(m_pBuffer, 1, streamHeader.dataLen, m_pFileId);
		//J_OS::LOGINFO("7");
		TUnlock(m_locker);
		//J_OS::LOGINFO("8");
		
		m_buffer->PushBuffer(m_pBuffer, streamHeader);
		m_lastTime -= 40;
		m_bGoNext = true;
	}
}