void CRTConnHttp::OnHttpMessage(http_message* httpMsg)
{

	const char* pPath = httpMsg->request_path;
	//const char* pQuery = httpMsg->query_string;
	const char* pContent = httpMsg->body;
	int nContentLen = (int)httpMsg->body_size;
    if (!pPath || !pContent) {
        LE("OnHttpMessage pPath or pContent error\n");
		//SendResponse(HPS_NOT_ACCEPTABLE, "");
        return;
    }

    MEETMSG m_mmsg;
    std::string str(pContent, nContentLen), err("");
    m_mmsg.GetMsg(str, err);
    if (err.length() > 0) {
        LE("OnHttpMessage pContent error:%s\n", err.c_str());
		//SendResponse(HPS_NOT_ACCEPTABLE, "");
        return;
    }

    if (strcmp(pPath, "/login") == 0) {
        if (m_mmsg._from.length()>0 && m_mmsg._pass.length()>0 && m_mmsg._nname.length()>0) {
            OnLogin(m_mmsg._from.c_str(), m_mmsg._pass.c_str(), m_mmsg._nname.c_str());
        } else {
            LE("login params errors\n");
        }
    } else if(strcmp(pPath, "/sndmsg") == 0) {
        if (m_mmsg._from.length()>0) {
            const char* pContentDump = strdup(pContent);
            OnSndMsg(m_mmsg._from.c_str(), m_mmsg._mtype, pContentDump, (int)strlen(pContentDump));
            free((void*)pContentDump);
            pContentDump = NULL;
        } else {
            LE("sndmsg params errors\n");
        }
    } else if(strcmp(pPath, "/getmsg") == 0) {
        if (m_mmsg._from.length()>0) {
            OnGetMsg(m_mmsg._from.c_str(), m_mmsg._mtype);
        } else {
            LE("getmsg params errors\n");
        }
    } else if (strcmp(pPath, "/logout") == 0) {
        if (m_mmsg._from.length()>0) {
            OnLogout(m_mmsg._from.c_str());
        } else {
            LE("logout params errors\n");
        }
    } else {
        SendResponse(HPS_NOT_ACCEPTABLE, "");
        return;
    }
}
예제 #2
0
j_result_t CXlClient::ProcessRequest(J_AsioDataBase *pAsioData)	
{
	if (m_ioCmdState == xl_init_state)
	{
		pAsioData->ioCall = J_AsioDataBase::j_read_e;
		CXlHelper::MakeNetData(pAsioData, m_readBuff, sizeof(CmdHeader));

		m_ioCmdState = xl_read_head_state;
	}
	else if (m_ioCmdState == xl_read_head_state)
	{
		CXlHelper::MakeNetData(pAsioData, m_readBuff + sizeof(CmdHeader), *((j_int32_t *)(m_readBuff + 4)) + sizeof(CmdTail));
		pAsioData->ioCall = J_AsioDataBase::j_read_e;

		m_ioCmdState = xl_read_data_state;
	}
	else if (m_ioCmdState == xl_read_data_state)
	{
		CmdHeader *pHeader = (CmdHeader *)m_readBuff;
		switch (pHeader->cmd)
		{
		case xlc_login:
			OnLogin(pAsioData);
			m_ioCmdState = xl_write_body_state;
			break;
		case xlc_logout:
			OnLogout(pAsioData);
			m_ioCmdState = xl_write_body_state;
			break;
		case xlc_heart_beat:
			OnHeartBeat(pAsioData);
			m_ioCmdState = xl_read_head_state;
			break;
		case xlc_start_real_view:
			OnRealPlay(pAsioData);
			m_ioCmdState = xl_read_head_state;
			break;
		case xlc_stop_real_view:
			OnRealStop(pAsioData);
			m_ioCmdState = xl_write_body_state;
			break;
		case xlc_start_vod_view:
			OnVodPlay(pAsioData);
			m_ioCmdState = xl_read_head_state;
			break;
		case xlc_stop_vod_view:
			OnVodStop(pAsioData);
			m_ioCmdState = xl_write_body_state;
			break;
		case xlc_start_real_alarm_info:
			OnStartAlarm(pAsioData);
			m_ioCmdState = xl_read_head_state;
			break;
		case xlc_stop_real_alarm_info:
			OnStopAlarm(pAsioData);
			m_ioCmdState = xl_write_body_state;
			break;
		case xlc_send_msg:
			OnSendMsg(pAsioData);
			m_ioCmdState = xl_write_body_state;
			break;
		case xlc_get_rcd_info:
			OnGetRctInfo(pAsioData);
			m_ioCmdState = xl_read_head_state;
			break;
		case xlc_start_upload:
			OnUploadStart(pAsioData);
			m_ioCmdState = xl_write_body_state;
			break;
		case xlc_uploading:
			OnUploadFile(pAsioData);
			m_ioCmdState = xl_read_head_state;
			break;
		case xlc_stop_upload:
			OnUploadStop(pAsioData);
			m_ioCmdState = xl_write_body_state;
			break;
		default:
			J_OS::LOGINFO("%d %X", pHeader->cmd, pHeader->flag & 0xFF);
			break;
		}
		//J_OS::LOGINFO("%d %X", pHeader->cmd, pHeader->flag & 0xFF);
	}
	else
	{	
		pAsioData->ioCall = J_AsioDataBase::j_read_e;
		CXlHelper::MakeNetData(pAsioData, m_readBuff, sizeof(CmdHeader));

		m_ioCmdState = xl_read_head_state;
	}

	return J_OK;
}
예제 #3
0
j_result_t CXlClient::OnHandleRead(J_AsioDataBase *pAsioData)
{
	if (m_ioCmdState == CXlProtocol::xl_init_state)
	{
		pAsioData->ioCall = J_AsioDataBase::j_read_e;
		CXlHelper::MakeNetData(pAsioData, m_readBuff, sizeof(CXlProtocol::CmdHeader));

		m_ioCmdState = CXlProtocol::xl_read_head_state;
	}
	else if (m_ioCmdState == CXlProtocol::xl_read_head_state)
	{
		CXlProtocol::CmdHeader cmdHeader = *((CXlProtocol::CmdHeader *)m_readBuff);
		//J_OS::LOGINFO("%d ", cmdHeader.cmd);
		//if (cmdHeader.length > 1000)
		//{
		//	J_OS::LOGINFO("");
		//}
		CXlHelper::MakeNetData(pAsioData, m_readBuff + sizeof(CXlProtocol::CmdHeader), cmdHeader.length + sizeof(CXlProtocol::CmdTail));
		pAsioData->ioCall = J_AsioDataBase::j_read_e;

		m_ioCmdState = CXlProtocol::xl_read_data_state;
	}
	else if (m_ioCmdState == CXlProtocol::xl_read_data_state)
	{
		CXlClientCmdData *pCmdData = (CXlClientCmdData *)m_readBuff;
		switch (pCmdData->cmdHeader.cmd)
		{
		case CXlProtocol::xlc_login:
			OnLogin(*pCmdData);
			break;
		case CXlProtocol::xlc_logout:
			OnLogout(*pCmdData);
			break;
		case CXlProtocol::xlc_heart_beat:
			OnHeartBeat(*pCmdData);
			break;
		case CXlProtocol::xlc_real_play:
			SaveRequest(*pCmdData, pCmdData->cmdHeader.flag == CXlProtocol::xl_ctrl_start);
			pCmdData->cmdRealPlay.pBuffer = &m_ringBuffer;
			JoDataBus->Request(pCmdData->cmdRealPlay.hostId, this, *pCmdData);
			break;
		case CXlProtocol::xlc_vod_play:
		case CXlProtocol::xlc_vod_download:
			SaveRequest(*pCmdData, pCmdData->cmdHeader.flag == CXlProtocol::xl_ctrl_start);
			pCmdData->cmdStartVod.pBuffer = &m_ringBuffer;
			JoDataBus->Request(pCmdData->cmdStartVod.hostId, this, *pCmdData);
			break;
		case CXlProtocol::xlc_real_alarm:
			EnableAlarm(*pCmdData, pCmdData->cmdHeader.flag == CXlProtocol::xl_ctrl_start);
			break;
		case CXlProtocol::xlc_trans_context:
			break;
		case CXlProtocol::xlc_upload_file:
			break;
		default:
			//assert(false);
			SendRequest(*pCmdData);
			break;
		}

		CXlHelper::MakeNetData(pAsioData, m_readBuff, sizeof(CXlProtocol::CmdHeader));
		pAsioData->ioCall = J_AsioDataBase::j_read_e;
		m_ioCmdState = CXlProtocol::xl_read_head_state;
	}

	return J_OK;
}