[Quickfix-users] quickfix with openfix
Brought to you by:
orenmnero
From: Gianpiero N. <mag...@gm...> - 2008-05-30 00:57:41
|
Hi, I downloaded, compiled ed installed quickfix engine. I wrote a simple class that implement Application.h. But when I test my application with openfix it doesn't work. The error was: "The undefined value ha no poperties" I tryed also with the example application tradingclient downloaded with quickfix: I have the same problem. Can you help me, please? Here there are all messages, config file and code. Thanks gianpiero My application (or the tradeclient application) send to openfix the logon message: * BeginString (8): FIX.4.4 BodyLength (9): 73 MsgType (35): A (Logon) MsgSeqNum (34): 1 SenderCompID (49): RTITEST1 SendingTime (52): 20080530-00:40:24.904 TargetCompID (56): OPENFIX#include "quickfix/FileStore.h" #include "quickfix/FileLog.h" #include "quickfix/SocketInitiator.h" #include "quickfix/Session.h" #include "quickfix/SessionSettings.h" #include "quickfix/Application.h" #include "Application.h" int main( int argc, char** argv ) { if ( argc != 2 ) { std::cout << "usage: " << argv[ 0 ] << " FILE." << std::endl; return 0; } std::string file = argv[ 1 ]; try { FIX::SessionSettings settings( file ); Application application; FIX::FileStoreFactory storeFactory( settings ); FIX::ScreenLogFactory logFactory( true, true, true ); FIX::SocketInitiator initiator( application, storeFactory, settings, logFactory ); initiator.start(); application.run(); initiator.stop(); return 0; } catch ( std::exception & e ) { std::cout << e.what(); return 1; } } EncryptMethod (98): 0 HeartBtInt (108): 2000 CheckSum (10): 003* The opefix server reply with a logout message: *BeginString (8): FIX.4.4#include "quickfix/FileStore.h" #include "quickfix/FileLog.h" #include "quickfix/SocketInitiator.h" #include "quickfix/Session.h" #include "quickfix/SessionSettings.h" #include "quickfix/Application.h" #include "Application.h" int main( int argc, char** argv ) { if ( argc != 2 ) { std::cout << "usage: " << argv[ 0 ] << " FILE." << std::endl; return 0; } std::string file = argv[ 1 ]; try { FIX::SessionSettings settings( file ); Application application; FIX::FileStoreFactory storeFactory( settings ); FIX::ScreenLogFactory logFactory( true, true, true ); FIX::SocketInitiator initiator( application, storeFactory, settings, logFactory ); initiator.start(); application.run(); initiator.stop(); return 0; } catch ( std::exception & e ) { std::cout << e.what(); return 1; } } BodyLength (9): 84 MsgType (35): 5 (Logout) SenderCompID (49): OPENFIX#include "quickfix/FileStore.h" #include "quickfix/FileLog.h" #include "quickfix/SocketInitiator.h" #include "quickfix/Session.h" #include "quickfix/SessionSettings.h" #include "quickfix/Application.h" #include "Application.h" int main( int argc, char** argv ) { if ( argc != 2 ) { std::cout << "usage: " << argv[ 0 ] << " FILE." << std::endl; return 0; } std::string file = argv[ 1 ]; try { FIX::SessionSettings settings( file ); Application application; FIX::FileStoreFactory storeFactory( settings ); FIX::ScreenLogFactory logFactory( true, true, true ); FIX::SocketInitiator initiator( application, storeFactory, settings, logFactory ); initiator.start(); application.run(); initiator.stop(); return 0; } catch ( std::exception & e ) { std::cout << e.what(); return 1; } } #include "quickfix/FileStore.h" #include "quickfix/FileLog.h" #include "quickfix/SocketInitiator.h" #include "quickfix/Session.h" #include "quickfix/SessionSettings.h" #include "quickfix/Application.h" #include "Application.h" int main( int argc, char** argv ) { if ( argc != 2 ) { std::cout << "usage: " << argv[ 0 ] << " FILE." << std::endl; return 0; } std::string file = argv[ 1 ]; try { FIX::SessionSettings settings( file ); Application application; FIX::FileStoreFactory storeFactory( settings ); FIX::ScreenLogFactory logFactory( true, true, true ); FIX::SocketInitiator initiator( application, storeFactory, settings, logFactory ); initiator.start(); application.run(); initiator.stop(); return 0; } catch ( std::exception & e ) { std::cout << e.what(); return 1; } } #include "quickfix/FileStore.h" #include "quickfix/FileLog.h" #include "quickfix/SocketInitiator.h" #include "quickfix/Session.h" #include "quickfix/SessionSettings.h" #include "quickfix/Application.h" #include "Application.h" int main( int argc, char** argv ) { if ( argc != 2 ) { std::cout << "usage: " << argv[ 0 ] << " FILE." << std::endl; return 0; } std::string file = argv[ 1 ]; try { FIX::SessionSettings settings( file ); Application application; FIX::FileStoreFactory storeFactory( settings ); FIX::ScreenLogFactory logFactory( true, true, true ); FIX::SocketInitiator initiator( application, storeFactory, settings, logFactory ); initiator.start(); application.run(); initiator.stop(); return 0; } catch ( std::exception & e ) { std::cout << e.what(); return 1; } } #include "quickfix/FileStore.h" #include "quickfix/FileLog.h" #include "quickfix/SocketInitiator.h" #include "quickfix/Session.h" #include "quickfix/SessionSettings.h" #include "quickfix/Application.h" #include "Application.h" int main( int argc, char** argv ) { if ( argc != 2 ) { std::cout << "usage: " << argv[ 0 ] << " FILE." << std::endl; return 0; } std::string file = argv[ 1 ]; try { FIX::SessionSettings settings( file ); Application application; FIX::FileStoreFactory storeFactory( settings ); FIX::ScreenLogFactory logFactory( true, true, true ); FIX::SocketInitiator initiator( application, storeFactory, settings, logFactory ); initiator.start(); application.run(); initiator.stop(); return 0; } catch ( std::exception & e ) { std::cout << e.what(); return 1; } } #include "quickfix/FileStore.h" #include "quickfix/FileLog.h" #include "quickfix/SocketInitiator.h" #include "quickfix/Session.h" #include "quickfix/SessionSettings.h" #include "quickfix/Application.h" #include "Application.h" int main( int argc, char** argv ) { if ( argc != 2 ) { std::cout << "usage: " << argv[ 0 ] << " FILE." << std::endl; return 0; } std::string file = argv[ 1 ]; try { FIX::SessionSettings settings( file ); Application application; FIX::FileStoreFactory storeFactory( settings ); FIX::ScreenLogFactory logFactory( true, true, true ); FIX::SocketInitiator initiator( application, storeFactory, settings, logFactory ); initiator.start(); application.run(); initiator.stop(); return 0; } catch ( std::exception & e ) { std::cout << e.what(); return 1; } } TargetCompID (56): RTITEST1 SendingTime (52): 20080530-00:41:31 MsgSeqNum (34): 1 Text (58): Test session shutting down#include "quickfix/FileStore.h" #include "quickfix/FileLog.h" #include "quickfix/SocketInitiator.h" #include "quickfix/Session.h" #include "quickfix/SessionSettings.h" #include "quickfix/Application.h" #include "Application.h" int main( int argc, char** argv ) { if ( argc != 2 ) { std::cout << "usage: " << argv[ 0 ] << " FILE." << std::endl; return 0; } std::string file = argv[ 1 ]; try { FIX::SessionSettings settings( file ); Application application; FIX::FileStoreFactory storeFactory( settings ); FIX::ScreenLogFactory logFactory( true, true, true ); FIX::SocketInitiator initiator( application, storeFactory, settings, logFactory ); initiator.start(); application.run(); initiator.stop(); return 0; } catch ( std::exception & e ) { std::cout << e.what(); return 1; } } #include "quickfix/FileStore.h" #include "quickfix/FileLog.h" #include "quickfix/SocketInitiator.h" #include "quickfix/Session.h" #include "quickfix/SessionSettings.h" #include "quickfix/Application.h" #include "Application.h" int main( int argc, char** argv ) { if ( argc != 2 ) { std::cout << "usage: " << argv[ 0 ] << " FILE." << std::endl; return 0; } std::string file = argv[ 1 ]; try { FIX::SessionSettings settings( file ); Application application; FIX::FileStoreFactory storeFactory( settings ); FIX::ScreenLogFactory logFactory( true, true, true ); FIX::SocketInitiator initiator( application, storeFactory, settings, logFactory ); initiator.start(); application.run(); initiator.stop(); return 0; } catch ( std::exception & e ) { std::cout << e.what(); return 1; } } #include "quickfix/FileStore.h" #include "quickfix/FileLog.h" #include "quickfix/SocketInitiator.h" #include "quickfix/Session.h" #include "quickfix/SessionSettings.h" #include "quickfix/Application.h" #include "Application.h" int main( int argc, char** argv ) { if ( argc != 2 ) { std::cout << "usage: " << argv[ 0 ] << " FILE." << std::endl; return 0; } std::string file = argv[ 1 ]; try { FIX::SessionSettings settings( file ); Application application; FIX::FileStoreFactory storeFactory( settings ); FIX::ScreenLogFactory logFactory( true, true, true ); FIX::SocketInitiator initiator( application, storeFactory, settings, logFactory ); initiator.start(); application.run(); initiator.stop(); return 0; } catch ( std::exception & e ) { std::cout << e.what(); return 1; } } CheckSum (10): 096* My application send another message (logout): *BeginString (8): FIX.4.4 BodyLength (9): 59 MsgType (35): 5 (Logout) MsgSeqNum (34): 2 SenderCompID (49): RTITEST1 SendingTime (52): 20080530-00:40:25.891 TargetCompID (56): OPENFIX CheckSum (1** BodyLength (9): 59**0): 138 *My simple application is composed by 3 file: Application.h #include "quickfix/Application.h" #include "quickfix/MessageCracker.h" #include "quickfix/Values.h" #include "quickfix/Utility.h" #include "quickfix/Mutex.h" #include "quickfix/fix40/NewOrderSingle.h" #include "quickfix/fix41/NewOrderSingle.h" #include "quickfix/fix42/NewOrderSingle.h" #include "quickfix/fix43/NewOrderSingle.h" #include "quickfix/fix44/NewOrderSingle.h" class Application : public FIX::Application { public: Application() : m_orderID(0), m_execID(0) {} // Application overloads char ask(); void run(); void onCreate( const FIX::SessionID& ); void onLogon( const FIX::SessionID& sessionID ); void onLogout( const FIX::SessionID& sessionID ); void toAdmin( FIX::Message&, const FIX::SessionID& ); void toApp( FIX::Message&, const FIX::SessionID& ) throw( FIX::DoNotSend ); void fromAdmin( const FIX::Message&, const FIX::SessionID& ) throw( FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::RejectLogon ); void fromApp( const FIX::Message& message, const FIX::SessionID& sessionID ) throw( FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::UnsupportedMessageType ); private: int m_orderID, m_execID; }; The Application.cpp #include "Application.h" #include "quickfix/Session.h" void Application::onCreate( const FIX::SessionID& sessionID ) { printf("onCreate called\n"); } void Application::onLogon( const FIX::SessionID& sessionID ) { printf("onLogon called\n"); } void Application::onLogout( const FIX::SessionID& sessionID ) { printf("onLogout called\n"); } void Application::toAdmin( FIX::Message& message, const FIX::SessionID& sessionID ) { printf("toAdmin called\n"); } void Application::toApp( FIX::Message& message, const FIX::SessionID& sessionID ) throw( FIX::DoNotSend ) { printf("toApp called\n"); } void Application::fromAdmin( const FIX::Message& message,const FIX::SessionID& sessionID ) throw( FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::RejectLogon ) { printf("fromAdmin called\n"); } void Application::fromApp( const FIX::Message& message,const FIX::SessionID& sessionID ) throw( FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::UnsupportedMessageType ) { printf("fromApp called\n"); //crack( message, sessionID ); } void Application::run() { while ( true ) { char action = ask(); }#include "quickfix/FileStore.h" #include "quickfix/FileLog.h" #include "quickfix/SocketInitiator.h" #include "quickfix/Session.h" #include "quickfix/SessionSettings.h" #include "quickfix/Application.h" #include "Application.h" int main( int argc, char** argv ) { if ( argc != 2 ) { std::cout << "usage: " << argv[ 0 ] << " FILE." << std::endl; return 0; } std::string file = argv[ 1 ]; try { FIX::SessionSettings settings( file ); Application application; FIX::FileStoreFactory storeFactory( settings ); FIX::ScreenLogFactory logFactory( true, true, true ); FIX::SocketInitiator initiator( application, storeFactory, settings, logFactory ); initiator.start(); application.run(); initiator.stop(); return 0; } catch ( std::exception & e ) { std::cout << e.what(); return 1; } } } char Application::ask() { char value; std::cout << std::endl // << "1) Enter Order" << std::endl // << "2) Cancel Order" << std::endl // << "3) Replace Order" << std::endl // << "4) Market data test" << std::endl // << "5) Quit" << std::endl << "?: "; std::cin >> value; return value; } And the follow is the configuartion file: * [DEFAULT] ConnectionType=initiator [SESSION]char Application::ask() { char value; std::cout << std::endl // << "1) Enter Order" << std::endl // << "2) Cancel Order" << std::endl // << "3) Replace Order" << std::endl // << "4) Market data test" << std::endl // << "5) Quit" << std::endl << "?: "; std::cin >> value; return value; } and the main: #include "quickfix/FileStore.h" #include "quickfix/FileLog.h" #include "quickfix/SocketInitiator.h" #include "quickfix/Session.h" #include "quickfix/SessionSettings.h" #include "quickfix/Application.h" #include "Application.h" int main( int argc, char** argv ) { if ( argc != 2 ) { std::cout << "usage: " << argv[ 0 ] << " FILE." << std::endl; return 0; } std::string file = argv[ 1 ]; try { FIX::SessionSettings settings( file ); Application application; FIX::FileStoreFactory storeFactory( settings ); FIX::ScreenLogFactory logFactory( true, true, true ); FIX::SocketInitiator initiator( application, storeFactory, settings, logFactory ); initiator.start(); application.run(); initiator.stop(); return 0; } catch ( std::exception & e ) { std::cout << e.what(); return 1; } } BeginString=FIX.4.4 SenderCompID=RTITEST1 TargetCompID=OPENFIX StartTime=00:00:01 EndTime=23:59:59 HeartBtInt=2000 SocketConnectPort=7001 SocketConnectHost=64.74.45.70 DataDictionary=/tmp/quickfix/spec/FIX44.xml FileStorePath=store.STORAGE EncryptMethod=0 MsgSeqNum=1 * * * |