示例#1
0
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;
}
示例#3
0
 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 ) ;
    }
 }
示例#4
0
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);		
	}
}
示例#5
0
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);
	}
}