[Quickfix-developers] Privately defined messages
Brought to you by:
orenmnero
From: Hugo L. <Hug...@in...> - 2003-02-04 14:32:06
|
Hi, I had to define some private (user defined) messages that have been agreeed by both firms. After a bit of work, I got something that works. However, I wonder if there is a cleaner way to do this. The code follows. Somewhere in "myfields.h": (...) namespace FIX { USER_DEFINE_STRING(UsrField1, 5000); USER_DEFINE_STRING(UsrFiled2, 5001); } (...) Somewhere in "mymessages.h": (...) namespace FIX { const char MsgType_UsrMessage1[] = "U1"; } namespace FIX42 { // Had to do this in FIX42 namespace. // User messages defined inside the FIX namespace // always cause an automatic "reject" on receiving, // thereby never reaching crack(). class UsrMessage1 : public Message { public: UsrMessage1() : Message( MsgType() ) {} UsrMessage1 ( const Message& m ) : Message( m ) {} static FIX::MsgType MsgType() { return FIX::MsgType( FIX::MsgType_UsrMessage1 ); } FIELD_SET( *this, FIX::UsrField1 ); FIELD_SET( *this, FIX::UsrField2 ); }; } (...) Somewhere in "myfixapplication.cpp" : (...) // Receive user message void CFixApplication::onMessage (const FIX42::Message& message, const FIX::SessionID& sessionID) { // Ugly. Had to create this "catch all" to handle the user defined messages // Maybe there's a cleaner/prettier/better way to do this... FIX::MsgType msgType; message.getHeader().getField( msgType ); if (msgType == FIX::MsgType_UsrMessage1) onMessage((FIX42::UsrMessage1)message, sessionID); else throw FIX::UnsupportedMessageType(); } void CFixApplication::onMessage (const FIX42::UsrMessage1& message, const FIX::SessionID& sessionID) { // TODO: Proper handling of this message... AfxMessageBox ("Got proprietary message UsrMessage1 !"); } (...) Thanks in advance, Hugo Leote |