Esempio n. 1
0
int NetPacket::ProcessRequest(struct payload_req *req, char *buf)
{
	printf("%s\n", __func__);
	switch (req->type & 0xFF000000) {

	case REQ_TYPE_HEARTBEAT:
		return ProcessHeartBeat(req, buf);
		break;
	case REQ_TYPE_RUNNING:
		return ProcessRunning(req, buf);
		break;
	case REQ_TYPE_MANUFACTURE:
		return ProcessMannufacture(req, buf);
		break;
	case REQ_TYPE_HW_DEBUG:
		break;
	case REQ_TYPE_SW_DEBUG:
		break;
	case REQ_TYPE_IMAGE:
		return ProcessImage(req, buf);
		break;
	default:
		break;

	}

	return -1;
}
Esempio n. 2
0
void C2CAN::Process() {
	unsigned long len;

	printf("Entering C2CAN::Process()\n");
	RxUDPSocket ob2CANRxSockRx(m_sIP, 1218, 0);

	while (QueryEndThread() == false) 
	{
		len = sizeof(m_ucRx);
		len = ob2CANRxSockRx.Receive((char*)m_ucRx, len);

		STo2CAN_RxCANPacket * pPack = (STo2CAN_RxCANPacket * )m_ucRx;

		unsigned short int header = pPack->iSig;
		//::Swap(header);

		if(len == 0)
		{
		}
		else if(len != sizeof(STo2CAN_RxCANPacket))
		{
			m_ulBadFrame++;
		}
		else if(header != SIG_RX_CAN_FRAMES)
		{
			m_ulBadFrame++;
		}
		else
		{
			STo2CAN_RxCANPacket *pSTo2CAN_RxCANPacket = (STo2CAN_RxCANPacket * )m_ucRx;
			//Swap(*pSTo2CAN_RxCANPacket);
			if(CheckSum((unsigned short*)m_ucRx,sizeof(STo2CAN_RxCANPacket)))
			{
				m_ulBadFrame++;
			}

			else
			{
//				CRITICAL_REGION(m_SemRxFrames);
				EnterCriticalSection(&m_SemRxFrames);
				m_RxFrames.push_back(pSTo2CAN_RxCANPacket->CANFrames[0]);
				LeaveCriticalSection(&m_SemRxFrames);
//				END_REGION;
			}
		}

		ProcessHeartBeat();

		Sleep(1);
	}
	printf("Leaving C2CAN::Process()\n");
}
Esempio n. 3
0
/**
 @brief 
*/
void XEWinConnectionInServer::Process( void )
{
	XPROF_OBJ_AUTO();
	// XWinSocketSvr::Process()에서 커넥션별로 락걸어서 들어오고 있음.
// 	XLOCK_OBJ;
	// 소켓이 끊어졌으면 더이상 돌필요 없다.
// 	if( m_Socket == 0 )		// 
// 		return;
	// 쌓인 패킷 다 뽑아낼때까지 락걸어두자 패킷 계속오면 계속 못빠져나올수도...
	if( !GetbDestroy() ) {
		// 만약 커넥션 프로세스도 멀티스레드에서 돌아가면 이거 전체를 락걸어야 한다.
		// 자동연결해제 옵션이 있으면 허트비트 처리
		if( GetbAutoDisconnect() ) {
			XPROF_OBJ("ProcessHeartBeat");
			ProcessHeartBeat();
		}
		//////////////////////////////////////////////////////////////////////////
		{
			XPROF_OBJ( "PumpPacket" );
			XENetworkConnection::xtError err = XENetworkConnection::xERR_NOERROR;
			XPacket p( true );
			// 		while( PumpPacket( &p ) )	{
			// 패킷 한번만 뽑고 넘어감.
			auto bPump = PumpPacket( &p, &err );
			if( bPump ) {
				XPROF_OBJ( "ProcessPacket" );
#ifdef _XCRYPT_PACKET
				BOOL bOk = FALSE;
				if( m_pSocketSvr->GetbEncryption() ) {
					bOk = p.DoDecrypto( m_pSocketSvr );
				}
#endif
				DWORD idPacket;
				p >> idPacket;
				ID idKey;
				p >> idKey;
				// 예약된 패킷 처리
				if( idPacket == XE::xXEPK_RESPONSE_HB )	{
#ifdef _DEBUG
					//			CONSOLE("recv heart beat");
#endif
					// 응답이 왔으므로 다시 대기상태로...
					m_timerHeartBeat.Off();
					m_modeHeartBeat = xHB_READY;
				}
				else {
					p._SetidPacket( idPacket );
					BOOL result = ProcessPacket( idPacket, idKey, p );
					if( result == FALSE ) {		// virtual call
						// 패킷 처리에 실패함. 접속 끊어야 함.
						// 일단 커넥션만 끊음.
						DoDisconnect();
						//					break;
					}
				}
				p.Clear();
			} else {
				if( err != XENetworkConnection::xERR_NOERROR ) {
					CONSOLE( "%s:PumpPacket실패:ip=%s", __TFUNC__, m_szIP );
				}
			}
		}
	} // bDestroy