2013-07-31 55 views
0

我在FromAdmin和FromApp中使用MessageCracker Crack(message, sessionId);(我使用的是quickfix/n的1.4版本,並且消息破解似乎也處理管理消息,至少重載的OnMessage(Quickfix.Fix44.Longon message, SessionID sessionid){}被正確處理)。Quickfix,是否有一個「catch-all」方法OnMessage來處理傳入的消息不是由重載方法處理?

我的問題是:如果我沒有重載所有通過MessageCracker傳入的消息的OnMessage方法,那麼會有一些「catch-all-other」消息方法將被調用以接收不能轉發的消息超載OnMessage方法?我不想讓QuickFix發送消息拒絕,因爲例如FIX服務器發送一個未處理的消息,但是,這對於流程流程來說可能不是必需的。我只是想自己處理它。在try/catch中處理它我感覺不舒服,因爲我不覺得這是最乾淨的方法。

有什麼建議嗎?

謝謝

回答

2

不,沒有。

任何可尊重的FIX交易對手都會有一個規範,告訴你他們將向你發送哪些消息類型(以及這些消息可能包含哪些字段)。

因此,您應該知道您需要支持的所有消息類型,並且可以爲其中的每個消息提供OnMessage調用。

在調用crack()之前,您可以預先測試消息字符串的類型字段。這會奏效,但我認爲這是錯誤的。

+0

我充分認識到預期的消息類型,但我不想被迫實施所有,如果接口I他們的由於特定的要求,寫入不需要支持它們。另外,我正在編寫一個基類,因此無法定位只有派生類知道的特定消息類型。 –

+0

聽起來您正在以非正統的方式使用QF/n。我不知道你的要求,但我認爲你可能在做一些誤導性的事情。根據我的經驗,大多數交易對手連接不使用超過20(非管理)味精類型;爲每個寫一個空或接近空的OnMessage()並不是很麻煩。 –

+0

我會考慮一下。感謝評論,我絕對感激。 –

1

你可以考慮try/catch最乾淨的方法。

在內部,Crack()方法只是搜索一個可以處理接收到的消息類型的方法(使用Reflection)。如果找不到,則會引發QuickFix.UnsupportedMessageType異常

重要提示:QuickFix不會通過MessageCracker拒絕不支持的消息,如果需要,您需要以編程方式拒絕它。

當你有這樣一個場景,你不知道這一切將由你的對手被髮送的消息,我不能看到比這兩個選項的更多:

  1. 趕上UnsupportedMessageType異常並處理您自己的消息字符串爲 。
  2. 沒有捕獲異常,忽略它通過在onMessage事件
+0

謝謝,您的評論,對黑客不自動拒絕郵件,幫助。 –

+0

經過更多測試後,我仍然對使用MessageCracker的正確方式感到困惑。假設我在FromAdmin和ToAdmin中使用Message Cracker。我的OnMessage(登錄消息,SessionID會話ID)在發送登錄請求時和接收登錄應答時被調用兩次。我如何區分兩者?我需要在登錄請求中添加我的用戶名和密碼,但在接收登錄確認答覆時顯然不希望這樣做。你對此有何看法? –

+0

也許另一種想法,我沒有深入思考,補充@Grant評論,是實現你自己的MessageCracker,它實際上很簡單,分裂兩種方法的Crack方法,並有OnMessageReceived和OnMessageSent處理程序。 MessageCracker源代碼可以很容易的找到[https://github.com/connamara/quickfixn/blob/master/QuickFIXn/MessageCracker.cs] – natenho

相關問題