[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
|