void UnmarshalLogText( const Seperator& cmd ) { const char* cmdName = cmd.arg( 0 ).c_str(); if( 1 == cmd.argCount() ) { sLog.Error( cmdName, "Usage: %s marshal-binary [marshal-binary] ...", cmdName ); return; } for( size_t i = 1; i < cmd.argCount(); ++i ) { const std::string& marshalBinaryStr = cmd.arg( i ); Buffer marshalBinary; if( !PyDecodeEscape( marshalBinaryStr.c_str(), marshalBinary ) ) { sLog.Error( cmdName, "Failed to decode string into binary." ); continue; } PyRep* r = InflateUnmarshal( marshalBinary ); if( NULL == r ) sLog.Error( cmdName, "Failed to unmarshal binary." ); else { sLog.Success( cmdName, "Result:" ); r->Dump( stdout, " " ); PyDecRef( r ); } } }
void TestMarshal( const Seperator& cmd ) { const char* cmdName = cmd.arg( 0 ).c_str(); DBRowDescriptor *header = new DBRowDescriptor; // Fill header: header->AddColumn( "historyDate", DBTYPE_FILETIME ); header->AddColumn( "lowPrice", DBTYPE_CY ); header->AddColumn( "highPrice", DBTYPE_CY ); header->AddColumn( "avgPrice", DBTYPE_CY ); header->AddColumn( "volume", DBTYPE_I8 ); header->AddColumn( "orders", DBTYPE_I4 ); CRowSet* rs = new CRowSet( &header ); PyPackedRow* row = rs->NewRow(); row->SetField( "historyDate", new PyLong( Win32TimeNow() ) ); row->SetField( "lowPrice", new PyLong( 18000 ) ); row->SetField( "highPrice", new PyLong( 19000 ) ); row->SetField( "avgPrice", new PyLong( 18400 ) ); row->SetField( "volume", new PyLong( 5463586 ) ); row->SetField( "orders", new PyInt( 254 ) ); sLog.Log( cmdName, "Marshaling..." ); Buffer marshaled; bool res = MarshalDeflate( rs, marshaled ); PyDecRef( rs ); if( !res ) { sLog.Error( cmdName, "Failed to marshal Python object." ); return; } sLog.Log( cmdName, "Unmarshaling..." ); PyRep* rep = InflateUnmarshal( marshaled ); if( NULL == rep ) { sLog.Error( cmdName, "Failed to unmarshal Python object." ); return; } sLog.Success( cmdName, "Final:" ); rep->Dump( stdout, " " ); PyDecRef( rep ); }
PyRep* EVETCPConnection::PopRep() { Buffer* packet = NULL; PyRep* res = NULL; { MutexLock lock( mMInQueue ); packet = mInQueue.PopPacket(); } if( NULL != packet ) { if( PACKET_SIZE_LIMIT < packet->size() ) sLog.Error( "Network", "Packet length %lu exceeds hardcoded packet length limit %u.", packet->size(), PACKET_SIZE_LIMIT ); else res = InflateUnmarshal( *packet ); } SafeDelete( packet ); return res; }