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