2012-11-16 3 views
0

"http://www.quickfixengine.org"의 파이썬 코드 예제를 사용 중입니다. 질문이 있습니다. 나는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 엔진의 내부에 생성됩니다. 이것은 에 의해 생성되며 과 Acceptor이라는 initialize() 함수로 생성됩니다. 이것은 엔진 소스를 해킹하려는 느낌이들 경우에만 들어야 할 물건입니다.

앱 개발자로서 실제로 세션에 대한 핸들이 필요하지 않습니다. 생각하시는 분이라면 (QF 목록에있는 일반적인 초보자 아이디어 인 프로그래밍 방식으로 seq # s를 재설정하려는 경우와 같이) 권장되지 않는 작업을 계획하고 계신 것 같습니다.

Session.lookupSession() 또는 getSession() 기능 중 하나를 Initiator 또는 Acceptor으로 사용할 수 있습니다. 그러나 다시, 나는 귀찮게 할 어떤 이유도 보지 못한다. 나는 노련한 QF 사용자이고 뭔가를 가지고 있기 때문에 이것을보아야 만했다. 나는 결코 결코을 할 수 없다.

+0

감사합니다. 나는'sendToTarget()'이'Session'에있는 메소드라는 것을 이해합니다. 제 질문은 클래스의 인스턴스가 어디에 생성되는지입니다. 아니요 (게시 한) 코드에서 사용할 수 있도록 "세션"이라는 이름이있는 항목이 없습니다. – gearhead

+0

@gearhead - 나쁘다. 나는 오해하고있다. 대답에 대한 내 업데이 트를 참조하십시오. –

+0

감사합니다. @ 그랜트. 나는 그것이 그 장면들 뒤에 만들어 졌다고 생각했다. QuickFIX 사이트의 코드를 사용하면 오류가 발생합니다. 그 줄에 도착하면 런타임 오류가 발생합니다 : ''NameError : name 'Session'이 정의되지 않았습니다. " 그 이름으로 아무것도 만들지 않기 때문에 어떤 의미가 있습니다 ... 생각했습니다. 그것 밖으로. 대신에 내가 사용하는 경우 : 'quickfix.Session_sendToTarget (message)' 작동 할 모든 것 _seems_ to @Grant. 지난 몇 게시물에서 제공 한 모든 도움과 조언에 정말 감사드립니다. – gearhead