Thread: [Quickfix-developers] .Net: Cloning QuickFix.Message
Brought to you by:
orenmnero
From: <reg...@ho...> - 2009-09-29 16:54:50
|
Hi, I'd like to clone FIX Messages. I have tried fromApp(Message msg) { Message newMsg = new Message(msg.ToString); } which seems to work fine. Unfortunately it is thenimpossible to cast newMsg in any FIX subtypes! e.g NewOrderSingle order = newMsg as NewOrderSingle; does not work anymore. (even though newMsg is indeed a NewOrderSingle 35=D) Any idea why? Thanks, Regis |
From: Brian E. <azz...@ya...> - 2009-09-29 18:21:25
|
It looks like it's because you're instantiating a base class (Message) and trying to cast it to a derived class (NewOrderSingle). As far as I can tell, Message doesn't define a clone method, so you'd probably have to figure out the message type first, then use the copy constructor for the derived class, e.g. Message newMsg; if (msg instanceof NewOrderSingle) { newMsg = new NewOrderSingle(msg); // NewOrderSingle's copy constructor for NOS and Message are identical } ... etc... Obviously, if you had a bunch of different messages you wanted to clone, you'd be better off building a switch statement off the MsgType of the message. - Brian Erst Thynk Software, Inc. ________________________________ From: "reg...@ho..." <reg...@ho...> To: qui...@li... Sent: Tuesday, September 29, 2009 11:46:48 AM Subject: [Quickfix-developers] .Net: Cloning QuickFix.Message QuickFIX Documentation: http://www.quickfixengine.org/quickfix/doc/html/index.html QuickFIX Support: http://www.quickfixengine.org/services.html Hi, I'd like to clone FIX Messages. I have tried fromApp(Message msg) { Message newMsg = new Message(msg.ToString); } which seems to work fine. Unfortunately it is thenimpossible to cast newMsg in any FIX subtypes! e.g NewOrderSingle order = newMsg as NewOrderSingle; does not work anymore. (even though newMsg is indeed a NewOrderSingle 35=D) Any idea why? Thanks, Regis ------------------------------------------------------------------------------ Come build with us! The BlackBerry® Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9-12, 2009. Register now! http://p.sf.net/sfu/devconf _______________________________________________ Quickfix-developers mailing list Qui...@li... https://lists.sourceforge.net/lists/listinfo/quickfix-developers |
From: <reg...@ho...> - 2009-09-29 18:34:25
|
Brian, The class I am trying to cast is a derived NewOrderSingle. It's indeed embedded in a switch statement but for the sake of the example I only reduced the code to the minimum. as a matter of fact in the fromApp() Method: "Message msg = message as NewOrderSingle" works. However: Message msg = new Message(message.ToString()) NewOrderSingle order = msg as NewOrderSingle don't I wish I could to NewOrderSingle order = new NewOrderSingle(message.ToString()) but this is not implemented. Any idea how I can sort the problem out? On Tue, 29 Sep 2009 11:21:10 -0700 (PDT), Brian Erst <azz...@ya...> wrote: > It looks like it's because you're instantiating a base class (Message) and > trying to cast it to a derived class (NewOrderSingle). > > As far as I can tell, Message doesn't define a clone method, so you'd > probably have to figure out the message type first, then use the copy > constructor for the derived class, e.g. > > Message newMsg; > if (msg instanceof NewOrderSingle) > { > newMsg = new NewOrderSingle(msg); // NewOrderSingle's copy > constructor for NOS and Message are identical > } ... etc... > > Obviously, if you had a bunch of different messages you wanted to clone, > you'd be better off building a switch statement off the MsgType of the > message. > > - Brian Erst > Thynk Software, Inc. > > > > > ________________________________ > From: "reg...@ho..." <reg...@ho...> > To: qui...@li... > Sent: Tuesday, September 29, 2009 11:46:48 AM > Subject: [Quickfix-developers] .Net: Cloning QuickFix.Message > > QuickFIX Documentation: > http://www.quickfixengine.org/quickfix/doc/html/index.html > QuickFIX Support: http://www.quickfixengine.org/services.html > > > Hi, > > I'd like to clone FIX Messages. I have tried > fromApp(Message msg) > { > Message newMsg = new Message(msg.ToString); > } > > which seems to work fine. > Unfortunately it is thenimpossible to cast newMsg in any FIX subtypes! > e.g > > NewOrderSingle order = newMsg as NewOrderSingle; > > does not work anymore. (even though newMsg is indeed a NewOrderSingle > 35=D) > > Any idea why? > > Thanks, > > Regis > > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry® Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9-12, 2009. Register now! > http://p.sf.net/sfu/devconf > _______________________________________________ > Quickfix-developers mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfix-developers |
From: <reg...@ho...> - 2009-09-29 18:41:15
|
Note that, the reason why I need to clone the message (which I would avoid to do as it's CPU consuming), is because it seems that when one tries to deal with the QuickFix message received directly from fromApp() or ToApp() asynchronoulsy the following problem arises: public void FromApp(Message message) { DoSomthingAsynchronously(message); crack(message); } will result in the asynchronous method to handle a message that can be "replaced" by the syncronous QuickFIX thread before it has a chance to be handled. e.g: -> Receive MSG1 -> Enqueue MSG1 for async processing -> Receive MSG2 -> Process MSG1 asyncronously -> It is now pointing to MSG2! This is probably due to a C++ memory handling approach but complicates things when used through the .Net Wrapper. Hope I make sense. Regis. On Tue, 29 Sep 2009 11:21:10 -0700 (PDT), Brian Erst <azz...@ya...> wrote: > It looks like it's because you're instantiating a base class (Message) and > trying to cast it to a derived class (NewOrderSingle). > > As far as I can tell, Message doesn't define a clone method, so you'd > probably have to figure out the message type first, then use the copy > constructor for the derived class, e.g. > > Message newMsg; > if (msg instanceof NewOrderSingle) > { > newMsg = new NewOrderSingle(msg); // NewOrderSingle's copy > constructor for NOS and Message are identical > } ... etc... > > Obviously, if you had a bunch of different messages you wanted to clone, > you'd be better off building a switch statement off the MsgType of the > message. > > - Brian Erst > Thynk Software, Inc. > > > > > ________________________________ > From: "reg...@ho..." <reg...@ho...> > To: qui...@li... > Sent: Tuesday, September 29, 2009 11:46:48 AM > Subject: [Quickfix-developers] .Net: Cloning QuickFix.Message > > QuickFIX Documentation: > http://www.quickfixengine.org/quickfix/doc/html/index.html > QuickFIX Support: http://www.quickfixengine.org/services.html > > > Hi, > > I'd like to clone FIX Messages. I have tried > fromApp(Message msg) > { > Message newMsg = new Message(msg.ToString); > } > > which seems to work fine. > Unfortunately it is thenimpossible to cast newMsg in any FIX subtypes! > e.g > > NewOrderSingle order = newMsg as NewOrderSingle; > > does not work anymore. (even though newMsg is indeed a NewOrderSingle > 35=D) > > Any idea why? > > Thanks, > > Regis > > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry® Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9-12, 2009. Register now! > http://p.sf.net/sfu/devconf > _______________________________________________ > Quickfix-developers mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfix-developers |
From: Kotecha, R. <Rav...@st...> - 2009-09-30 09:59:11
|
Hi Regis, Have you tried the slightly more 'dirty' approach of setString? Instead of: NewOrderSingle order = new NewOrderSingle(message.ToString()); Try: NewOrderSingle order = new NewOrderSingle(); order.setString(message.ToString()); I've used something similar in the past when our QF engine would dump messages in a raw format straight into a database for processing later. Regards, Ravi Kotecha -----Original Message----- From: reg...@ho... [mailto:reg...@ho...] Sent: 29 September 2009 19:41 To: qui...@li... Subject: Re: [Quickfix-developers] .Net: Cloning QuickFix.Message QuickFIX Documentation: http://www.quickfixengine.org/quickfix/doc/html/index.html QuickFIX Support: http://www.quickfixengine.org/services.html Note that, the reason why I need to clone the message (which I would avoid to do as it's CPU consuming), is because it seems that when one tries to deal with the QuickFix message received directly from fromApp() or ToApp() asynchronoulsy the following problem arises: public void FromApp(Message message) { DoSomthingAsynchronously(message); crack(message); } will result in the asynchronous method to handle a message that can be "replaced" by the syncronous QuickFIX thread before it has a chance to be handled. e.g: -> Receive MSG1 -> Enqueue MSG1 for async processing -> Receive MSG2 -> Process MSG1 asyncronously -> It is now pointing to MSG2! This is probably due to a C++ memory handling approach but complicates things when used through the .Net Wrapper. Hope I make sense. Regis. On Tue, 29 Sep 2009 11:21:10 -0700 (PDT), Brian Erst <azz...@ya...> wrote: > It looks like it's because you're instantiating a base class (Message) and > trying to cast it to a derived class (NewOrderSingle). > > As far as I can tell, Message doesn't define a clone method, so you'd > probably have to figure out the message type first, then use the copy > constructor for the derived class, e.g. > > Message newMsg; > if (msg instanceof NewOrderSingle) > { > newMsg = new NewOrderSingle(msg); // NewOrderSingle's copy > constructor for NOS and Message are identical > } ... etc... > > Obviously, if you had a bunch of different messages you wanted to clone, > you'd be better off building a switch statement off the MsgType of the > message. > > - Brian Erst > Thynk Software, Inc. > > > > > ________________________________ > From: "reg...@ho..." <reg...@ho...> > To: qui...@li... > Sent: Tuesday, September 29, 2009 11:46:48 AM > Subject: [Quickfix-developers] .Net: Cloning QuickFix.Message > > QuickFIX Documentation: > http://www.quickfixengine.org/quickfix/doc/html/index.html > QuickFIX Support: http://www.quickfixengine.org/services.html > > > Hi, > > I'd like to clone FIX Messages. I have tried > fromApp(Message msg) > { > Message newMsg = new Message(msg.ToString); > } > > which seems to work fine. > Unfortunately it is thenimpossible to cast newMsg in any FIX subtypes! > e.g > > NewOrderSingle order = newMsg as NewOrderSingle; > > does not work anymore. (even though newMsg is indeed a NewOrderSingle > 35=D) > > Any idea why? > > Thanks, > > Regis > > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry® Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9-12, 2009. Register now! > http://p.sf.net/sfu/devconf > _______________________________________________ > Quickfix-developers mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfix-developers ------------------------------------------------------------------------------ Come build with us! The BlackBerry® Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9-12, 2009. Register now! http://p.sf.net/sfu/devconf _______________________________________________ Quickfix-developers mailing list Qui...@li... https://lists.sourceforge.net/lists/listinfo/quickfix-developers ***************************************************************************** This communication is sent by the Standard Bank Plc or one of its affiliates The registered details of Standard Bank Plc are: Registered in England No. 2130447, Registered Office 20 Gresham Street, London, EC2V 7JE Authorised and Regulated by the Financial Services Authority. More information on Standard Bank is available at www.standardbank.com Everything in this email and any attachments relating to the official business of Standard Bank Group Limited and any or all subsidiaries, the Company, is proprietary to the Company. It is confidential, legally privileged and protected by relevant laws. The Company does not own and endorse any other content. Views and opinions are those of the sender unless clearly stated as being that of the Company. The person or persons addressed in this email are the sole authorised recipient. Please notify the sender immediately if it has unintentionally, or inadvertently reached you and do not read, disclose or use the content in any way and delete this e-mail from your system. The Company cannot ensure that the integrity of this email has beenmaintained nor that it is free of errors, virus, interception or interference. The sender therefore does not accept liability for any errors or omissions in the contents of this message which arise as a result of e-mail transmission. If verification is required please request a hard-copy version. This message is provided for informational purposes and should not be construed as a solicitation or offer to buy or sell any securities or related financial instruments. ***************************************************************************** |
From: <reg...@ho...> - 2009-09-30 09:08:35
|
Well I have decided to "ignore" the type since I just want to convert QuickFIX message into a proper C# Value object. I have done something like this: FIXMsgs fixMsg = new FIXMsgs(); fixMsg.SenderCompID = msg.getHeader().getField(new SenderCompID()).getValue(); ixMsg.TargetCompID = msg.getHeader().getField(new TargetCompID()).getValue(); fixMsg.SeqNum = msg.getHeader().getField(new MsgSeqNum()).getValue(); fixMsg.MessageType = msg.getHeader().getString(MsgType.FIELD); if (msg.isSetField(OrdType.FIELD)) fixMsg.OrderType = msg.getString(OrdType.FIELD); etc... Anyway I still think that having to clone the QuickFIX message to process it async is quite dodgy... definitely not very performant. On Wed, 30 Sep 2009 09:55:23 +0100, "Kotecha, Ravi" <Rav...@st...> wrote: > Hi Regis, > > Have you tried the slightly more 'dirty' approach of setString? > Instead of: > NewOrderSingle order = new NewOrderSingle(message.ToString()); > Try: > NewOrderSingle order = new NewOrderSingle(); > order.setString(message.ToString()); > > I've used something similar in the past when our QF engine would dump > messages in a raw format straight into a database for processing later. > > Regards, > Ravi Kotecha > > -----Original Message----- > From: reg...@ho... [mailto:reg...@ho...] > Sent: 29 September 2009 19:41 > To: qui...@li... > Subject: Re: [Quickfix-developers] .Net: Cloning QuickFix.Message > > QuickFIX Documentation: > http://www.quickfixengine.org/quickfix/doc/html/index.html > QuickFIX Support: http://www.quickfixengine.org/services.html > > > Note that, the reason why I need to clone the message (which I would > avoid > to do as it's CPU consuming), is because it seems that when one tries to > deal with the QuickFix message received directly from fromApp() or > ToApp() > asynchronoulsy the following problem arises: > > public void FromApp(Message message) > { > DoSomthingAsynchronously(message); > crack(message); > } > > will result in the asynchronous method to handle a message that can be > "replaced" by the syncronous QuickFIX thread before it has a chance to be > handled. > e.g: > > -> Receive MSG1 > -> Enqueue MSG1 for async processing > -> Receive MSG2 > -> Process MSG1 asyncronously -> It is now pointing to MSG2! > > This is probably due to a C++ memory handling approach but complicates > things when used through the .Net Wrapper. > > Hope I make sense. > > Regis. > > On Tue, 29 Sep 2009 11:21:10 -0700 (PDT), Brian Erst > <azz...@ya...> wrote: >> It looks like it's because you're instantiating a base class (Message) > and >> trying to cast it to a derived class (NewOrderSingle). >> >> As far as I can tell, Message doesn't define a clone method, so you'd >> probably have to figure out the message type first, then use the copy >> constructor for the derived class, e.g. >> >> Message newMsg; >> if (msg instanceof NewOrderSingle) >> { >> newMsg = new NewOrderSingle(msg); // NewOrderSingle's copy >> constructor for NOS and Message are identical >> } ... etc... >> >> Obviously, if you had a bunch of different messages you wanted to > clone, >> you'd be better off building a switch statement off the MsgType of the >> message. >> >> - Brian Erst >> Thynk Software, Inc. >> >> >> >> >> ________________________________ >> From: "reg...@ho..." <reg...@ho...> >> To: qui...@li... >> Sent: Tuesday, September 29, 2009 11:46:48 AM >> Subject: [Quickfix-developers] .Net: Cloning QuickFix.Message >> >> QuickFIX Documentation: >> http://www.quickfixengine.org/quickfix/doc/html/index.html >> QuickFIX Support: http://www.quickfixengine.org/services.html >> >> >> Hi, >> >> I'd like to clone FIX Messages. I have tried >> fromApp(Message msg) >> { >> Message newMsg = new Message(msg.ToString); >> } >> >> which seems to work fine. >> Unfortunately it is thenimpossible to cast newMsg in any FIX subtypes! >> e.g >> >> NewOrderSingle order = newMsg as NewOrderSingle; >> >> does not work anymore. (even though newMsg is indeed a NewOrderSingle >> 35=D) >> >> Any idea why? >> >> Thanks, >> >> Regis >> >> >> > ------------------------------------------------------------------------------ >> Come build with us! The BlackBerry® Developer Conference in SF, CA >> is the only developer event you need to attend this year. Jumpstart > your >> developing skills, take BlackBerry mobile applications to market and > stay >> ahead of the curve. Join us from November 9-12, 2009. Register now! >> http://p.sf.net/sfu/devconf >> _______________________________________________ >> Quickfix-developers mailing list >> Qui...@li... >> https://lists.sourceforge.net/lists/listinfo/quickfix-developers > > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry® Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > > ahead of the curve. Join us from November 9-12, 2009. Register > now! > http://p.sf.net/sfu/devconf > _______________________________________________ > Quickfix-developers mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfix-developers > > > ***************************************************************************** > This communication is sent by the Standard Bank Plc or one of its > affiliates > The registered details of Standard Bank Plc are: > Registered in England No. 2130447, Registered Office 20 Gresham Street, > London, EC2V 7JE > Authorised and Regulated by the Financial Services Authority. > > More information on Standard Bank is available at www.standardbank.com > > Everything in this email and any attachments relating to the official > business of Standard Bank Group Limited and any or all subsidiaries, the > Company, is proprietary to the Company. It is confidential, legally > privileged and protected by relevant laws. The Company does not own and > endorse any other content. Views and opinions are those of the sender > unless clearly stated as being that of the Company. > > The person or persons addressed in this email are the sole authorised > recipient. Please notify the sender immediately if it has unintentionally, > or inadvertently reached you and do not read, disclose or use the content > in any way and delete this e-mail from your system. > > The Company cannot ensure that the integrity of this email has > beenmaintained nor that it is free of errors, virus, interception or > interference. The sender therefore does not accept liability for any errors > or omissions in the contents of this message which arise as a result of > e-mail transmission. If verification is required please request a hard-copy > version. This message is provided for informational purposes and should not > be construed as a solicitation or offer to buy or sell any securities or > related financial instruments. > > ***************************************************************************** > |