在QuickFIX中发送消息

时间:2012-11-16 22:13:04

标签: quickfix

我正在使用“http://www.quickfixengine.org”中的python代码示例并提出问题。我使用下面显示的代码段创建我的应用程序

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 个答案:

答案 0 :(得分:1)

Session不是对象,它是。在这种情况下,sendToTarget()是静态方法。

Session,维护一个类静态的会话列表。 sendToTarget()使用邮件中的标题字段(或您明确提供的标题字段)来确定要发送的会话。


编辑:我误解了你的问题。这是你问的答案。

会话是在QF引擎的内容中创建的。它由SessionFactory创建,initialize()本身是在InitiatorAcceptor的{​​{1}}函数中创建的。如果你想攻击引擎源,这只是你需要进入的东西。

作为应用程序开发人员,您实际上不需要会话句柄。如果你认为你这样做,那么我猜你可能正在计划做一些不推荐的事情(比如想要以编程方式重置seq#s,这是QF列表上常见的新手坏主意)。

如果您真的想要一个句柄,可以使用Session.lookupSession()getSession()Initiator的{​​{1}}个功能之一。但同样,我认为没有理由打扰。我是一名经验丰富的QF用户,我不得不去看看,因为它是我从来没有做过