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; } }
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; }
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; }