示例#1
0
int apollo_message_script_entry(void *engine, nd_handle  handle, nd_usermsgbuf_t *msg, const char *script)
{
	LogicParserEngine *scriptEngine = (LogicParserEngine *)engine;
	if (!scriptEngine) {
		NDObject *pObj = NDObject::FromHandle(handle);
		if (!pObj) {
			return -1;
		}
		scriptEngine = (LogicParserEngine *)pObj->getScriptEngine();
		if (!scriptEngine) {
			nd_logerror("can not get role script parser\n");
			return -1;
		}
	}

	NDIStreamMsg inmsg(msg);
	//call function 
	parse_arg_list_t params;

	//function name 
	params.push_back(LogicDataObj(script));

	//receive message user
	params.push_back(LogicDataObj((void*)handle, OT_OBJ_NDHANDLE));

	//message object
	params.push_back(LogicDataObj((void*)&inmsg, OT_OBJ_MSGSTREAM));

	LogicDataObj result;
	scriptEngine->runScript(script, params, result);

	return 0;

}
示例#2
0
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
int FIXWriter::operator()()
{
	int result(0), processed(0), invalid(0);

   for (; !_session.is_shutdown();)
   {
		try
		{
			Message *inmsg(0);
			_msg_queue.pop (inmsg); // will block
			if (!inmsg)
				break;
#if defined MSGRECYCLING
			_session.send_process(inmsg);
			inmsg->set_in_use(false);
#else
			scoped_ptr<Message> msg(inmsg);
			_session.send_process(msg.get());
#endif
			++processed;
		}
		catch (PeerResetConnection& e)
		{
			_session.log(e.what());
			result = -1;
			break;
		}
		catch (exception& e)	// also catches Poco::Net::NetException
		{
			_session.log(e.what());
			++invalid;
			break; //?
		}
	}

	ostringstream ostr;
	ostr << "FIXWriter: " << processed << " messages processed, " << invalid << " invalid";
	_session.log(ostr.str());

	return result;
}
示例#3
0
void FixLog::findRecordsOffline()
{
    reader_.seek(0);
    QByteArray tail = reader_.read( pos()-1 );
    if( tail.size() < 100 )
        return;

    const char* ptr = tail.data();
    while( ptr-tail.data() < tail.size() ) 
    {
        if( !(ptr = strstr(ptr, "8=FIX.4.4")) ) 
            break;

        readerPos_ = ptr - tail.data();
        reader_.seek(readerPos_);

        QByteArray message = reader_.readLine();
        if(message.isEmpty()) return;
         
        FixRecord rec;
        std::string val = FIX::getField(message, "35");
        std::string sym;
        qint32 code = -1;
        if( val[0] == 'V' || val[0] == 'W' || val[0] == 'Y' ) {
            sym = FIX::getField(message, "262");
            code = atol( FIX::getField(message, "48").c_str() );
            if( code < 1 ) code = -1;
        }

        if( 0 == memcmp(ptr-3, ">> ", 3) )
            outmsg(message, sym.c_str(), code);
        else
            inmsg(message, sym.c_str(), code);
        ptr += message.size() + sizeof(sampleTimestamp);
    }
}