void listener_loop() { for(int i=0;i<MAX_CONN;i++) { if(clients[i].state == STATE_HOLD) { if(clients[i].readBufAvaliable > HEAD_LENGTH) { EnterCriticalSection(&CS); memcpy(&head,clients[i].readBuffer,HEAD_LENGTH); if(clients[i].readBufAvaliable >= head.length+HEAD_LENGTH) { clients[i].readBufAvaliable -= HEAD_LENGTH; memcpy(clients[i].readBuffer,clients[i].readBuffer+HEAD_LENGTH,clients[i].readBufAvaliable); memcpy(buffer,clients[i].readBuffer,head.length); clients[i].readBufAvaliable -= head.length; memcpy(clients[i].readBuffer,clients[i].readBuffer+head.length,clients[i].readBufAvaliable); Log::info("msg recv,mid:%d,len:%d",head.msgid,head.length); dispatchMsg(head.msgid,buffer); } LeaveCriticalSection(&CS); } } } }
int AppMessageParser::parse( uint8_t octet ) { int r = 0; AppMessage *msg = 0; // Is there room in the header buffer? if ( m_header_buffer.canPut() ) { // yes, try parse the header msg = parseHeader( octet ); } else { // is there octets we are expecting for the payload? if ( m_octets_left_in_payload ) { // yes, parse the payload msg = parsePayload( octet ); } } if ( msg ) { dispatchMsg( *msg ); r = 0; } if ( m_error_count > 0 ) { r = -1; } return r; }
OSS_INLINE INT32 _pmdObjBase::dispatch ( pmdEDUEvent * event, INT32 *pTime ) { if ( event->_eventType == PMD_EDU_EVENT_MSG ) { return dispatchMsg ( 0, (MsgHeader*)(event->_Data), pTime ) ; } else { return dispatchEvent( event, pTime ) ; } }
void MsgProcessor::run() { while (true) { lock_.lock(); int rawmsg_count = message_queue_.count(); lock_.unlock(); if (rawmsg_count == 0) break; Json::Reader reader; Json::Value root; QByteArray unparse_msg = message_queue_.dequeue(); int idx = unparse_msg.indexOf("\r\n\r\n"); unparse_msg = unparse_msg.mid(idx+4); if (!reader.parse(QString(unparse_msg).toStdString(), root, false)) { continue; } qDebug()<<"recive msg"<<QString::fromStdString(root.toStyledString())<<endl; if (root["retcode"].asInt() == 121) { } QVector<QQMsg *> be_sorting_msg; for (unsigned int i = 0; i < root["result"].size(); ++i) { const Json::Value result = root["result"][i]; if ( isMsgRepeat(result) ) continue; QString type = QString::fromStdString(result["poll_type"].asString()); QQMsg *msg = createMsg(type, result); if ( msg ) be_sorting_msg.append(msg); } if ( be_sorting_msg.size() > 1 ) sortByTime(be_sorting_msg); dispatchMsg(be_sorting_msg); } }
void listener_loop() { memset(&head,0,sizeof(MsgHead)); if(conn.readBufAvaliable >= HEAD_LENGTH) { EnterCriticalSection(&CS); memcpy(&head,conn.readBuffer,HEAD_LENGTH); Log::info("sizeof MsgHead:%d",sizeof(MsgHead)); Log::info("conn.readBufAvaliable:%d",conn.readBufAvaliable); Log::info("HEAD_LENGTH:%d",HEAD_LENGTH); Log::info("head.length:%d",head.length); if(conn.readBufAvaliable >= head.length) { memcpy(buffer,conn.readBuffer+HEAD_LENGTH,head.length-HEAD_LENGTH); conn.readBufAvaliable -= head.length; memcpy(conn.readBuffer,conn.readBuffer+head.length,conn.readBufAvaliable); dispatchMsg(head.msgid,buffer); Log::info("msg recv"); } LeaveCriticalSection(&CS); } }