2012-11-16 116 views
0

我正在使用「http://www.quickfixengine.org」中的python代碼示例並提出問題。我創建了使用以下在QuickFIX中發送消息

import quickfix 

if len(sys.argv) < 2: return 
fileName = sys.argv[1] 

try: 
    settings = quickfix.SessionSettings(fileName) 
    application = quickfix.MyApplication() 
    storeFactory = quickfix.FileStoreFactory(settings) 
    logFactory = quickfix.FileLogFactory(settings) 
    initiator = quickfix.SocketInitiator(application, storeFactory, settings, logFactory) 
    initiator.start() 
    # while condition == true: do something 
    initiator.stop() 
except quickfix.ConfigError, e: 
    print e 

建立了連接,我得到記錄中顯示的代碼段我的應用程序,現在我要發送消息(命令,例如)。提供的代碼段爲:

def sendOrderCancelRequest: 
    message = quickfix.Message(); 
    header = message.getHeader(); 

    header.setField(...) 
    *<...build the header and body...>* 
    message.setField(...) 

    Session.sendToTarget(message) 

我的問題是關於那個Session對象。在哪裏/如何創建?它是用Session = quickfix.Session()之類的東西創建的,還是其他沒有顯示的東西?我已經嘗試了一些東西,但它的文檔只是試錯的缺乏......

回答

1

Session不是對象,這是一個類。在這種情況下,sendToTarget()是靜態方法。

Session維護會話的類靜態列表。 sendToTarget()使用消息中的頭域(或您明確提供的頭域)來確定發送哪個會話。


編輯:我誤解了你的問題。這是你問什麼的答案。

該會話是在QF引擎的內部創建的。它由一個SessionFactory創建,它本身在initialize()函數InitiatorAcceptor中創建。如果您覺得黑客入侵引擎源,這只是您需要進入的東西。

作爲一名應用程序開發人員,您確實不需要處理會話。如果你認爲你這樣做,那麼我猜你可能打算做一些不被推薦的事情(比如想要以編程方式重置seq#s,這是QF列表中常見的新手Bad Idea)。

如果您確實想要處理它,可以使用Session.lookupSession()getSession()函數InitiatorAcceptor之一。但是,再次,我沒有看到任何理由打擾。我是一位經驗豐富的QF用戶,我不得不去看這個,因爲這是我永遠不會做的

+0

謝謝@grant。我明白'sendToTarget()'是'Session'中的一個方法,我的問題是類的實例在哪裏創建。沒有在我發佈的代碼中的任何地方創建名稱爲「Session」的任何東西,以便可以使用它。 – gearhead

+0

@gearhead - 我的壞,我誤解了。看到我的更新回答。 –

+0

謝謝@Grant。我想它是在幕後創建的。當我使用QuickFIX網站的代碼時出現錯誤。當它到達那條線時,我得到一個運行時錯誤: ''NameError:name'Session'is not defined'' 這是有道理的,因爲我從來沒有用這個名字創建任何東西... 我想我想它雖然。如果我使用: 'quickfix.Session_sendToTarget(message)' Everything _seems_ to work 再次感謝@Grant。我非常感謝您在我的前幾篇文章中提供的所有幫助和建議。 – gearhead