2014-04-10 3 views
0

저는 C++에서 QuickFix를 사용하는 중개인 FIX 플랫폼의 Initiator 측면을 구현하는 중입니다. FIX 스펙은 지원하는 메시지 목록을 제공합니다. 로그온, 하트 비트 및 기타 메시지.QuickFix MessageCracker : 구현할 메시지를 결정하는 방법은 무엇입니까?

MessageCracker (수정 4.2)는 동일한 유형의 두 가지 오버로드를 제공합니다. 예를 들어

virtual void onMessage(ResendRequest&, const FIX::SessionID&) {}

virtual void onMessage(const ResendRequest&, const FIX::SessionID&) {}

편집 : 나는 ApplicationMessageCracker에서 파생 된 클래스가 있으며 onMessage()를 호출 결과 toAdmin() 내에서 crack(FIX::Message&)을 (호출 const이없는 버전).

내 혼란은 onMessage()의 버전을 무시해야한다는 점과 관련이 있습니까? const FIX::Message& 또는 다른 하나는?

+0

'fromApp()'내부에서만'crack()'을 호출하십시오. 아니 다른 곳. –

답변

2
virtual void onMessage(const ResendRequest&, const FIX::SessionID&) 

crack은 const 참조를 전달하므로 위의 함수가 호출됩니다. 또한 매우 구체적인 요구가없는 한 수신 된 FIX 메시지를 변경하면 안됩니다. onMessage은 보내는 것이 아니라 메시지를받는 것입니다.

1

나는 첫 번째 것이 전송 용이고 두 번째 것은 수신 용임을 이해합니다.

그건 완전히 잘못되었습니다. 도 보내지 않습니다.

DumbCoder가 제안한 것처럼 솔직히 두 이유가 모두 존재하는지 모르겠지만 const 버전을 사용합니다. 수신 된 메시지를 수정해야 할 정당한 이유는 없습니다.

귀하의 의도가 명확하지 않으므로 다른 메모 :
관리자 메시지 (예 : 로그인, 하트 비트 등)에 OnMessage을 구현하지 마십시오. 만약 당신이 (그리고 아마 당신)에 반응해야합니다 FromAdmin() 콜백을 사용합니다.

+0

quickfix 페이지에서 _toAdmin은 FIX 엔진에서 상대방에게 전송되는 관리 메시지를 최대로 제공한다고 말합니다. 이것은 일반적으로 응용 프로그램에는 유용하지 않지만 원하는 모든 로깅을 제공합니다. FIX :: Message는 const가 아닙니다. 이것은 당신이 outst를 보내기 전에 관리 메시지에 필드를 추가 할 수있게 해준다. const가없는 const 호출 onMessage가없는 크랙 버전, 즉 첫 번째 오버로드가 전송되기 전에 수정 메시지를 수정한다고 가정 한 이유이다. – MaLoad

+0

가능한 예는 로그온 메시지 일 수 있습니다. logon.setField()를 사용하여 로그온하기 전에'onMessage (Logon &)'에 사용자 이름과 패스워드를 추가 할 수 있습니다. – MaLoad

+0

@MaLoad - onMessage는 이름을 의미하므로 메시지를받지 않고 메시지를 보낼 때만 의미합니다. 'sendToTarget'을 사용하여 메시지를 보냅니다. 너는 이상한 일을하고있다. 당신이 우리가 그것을 이해할 수 있도록 해주는 몇 가지 예를 게시 할 수 있습니까? – DumbCoder