Trên thực tế, tất cả các bạn cần phải biết là thế này:
fromApp()
callback của bạn nhận được một đối tượng Message
. Thông điệp đó thực sự là một NewOrderSingle hoặc ExecutionReport hoặc một cái gì đó. Thay vì làm cho bạn hình dung ra, QF cho phép bạn kế thừa từ MessageCracker
. Để sử dụng nó, hãy gọi crack()
trong fromApp()
của bạn, như sau:
void fromApp(const FIX::Message& message, const FIX::SessionID& sessionID)
throw(FIX::FieldNotFound&, FIX::IncorrectDataFormat&, FIX::IncorrectTagValue&, FIX::UnsupportedMessageType&)
{
crack(message, sessionID);
}
gì crack()
làm là thế này:
- Chuyển đổi
Message
bạn vào lớp thích hợp (ví dụ NewOrderSingle
, ExecutionReport
, vv)
- Gọi tới số gọi lại
onMessage(subtype)
do người dùng xác định của bạn, nếu được xác định. Nếu không được xác định, nó sẽ ném một ngoại lệ UnsupportedMessageType
và ứng dụng của bạn sẽ tự động gửi BusinessMessageReject (35 = j) cho đối tác.
Vì vậy, bạn có muốn xử lý thư NewOrderSingle không? Tuyệt vời, chỉ cần xác định một cuộc gọi lại onMessage(NewOrderSingle)
.
void onMessage(const FIX42::NewOrderSingle& message, const FIX::SessionID&)
{
// Do whatever you want with your NewOrderSingle message's content.
// Note that this message and the one passed to crack() are the same, content-wise.
}
Bạn có muốn xử lý ExecutionReport không? Xác định onMessage(ExecutionReport)
. Và cứ thế.
Nhưng còn những loại thư bạn không muốn xử lý? Nó sẽ hút nếu bạn phải thêm xử lý để từ chối tất cả các loại tin nhắn khác, nhưng may mắn thay, bạn không phải. Như tôi đã nói trước đó, nếu bạn không xác định một số onMessage()
, QF sẽ từ chối nó cho bạn. (Nếu bạn muốn nuốt một loại tin nhắn cụ thể và bỏ qua nó mà không bị từ chối, sau đó chỉ cần xác định một cuộc gọi onMessage()
không có nội dung.)
Điều đó có làm rõ một chút không? Có lẽ bây giờ this page in the QF docs có thể đọc dễ dàng hơn một chút - phần dưới cùng nói về MessageCracker.
Lưu ý: MessageCracker không xử lý thông báo cấp phiên (còn gọi là "quản trị").Nếu bạn muốn thêm xử lý tùy chỉnh cho, ví dụ như tin nhắn Logon hoặc Heartbeat, bạn phải thực hiện điều đó một cách rõ ràng trong fromAdmin()
(xem this question để biết thêm thông tin).
Cảm ơn lời giải thích @Grant. Về phần cuối cùng của câu hỏi của tôi, làm thế nào đến trong phần rất dưới cùng nó nói 'Python (không được hỗ trợ)' khi thảo luận về cracker tin nhắn. Tôi không cần phải làm điều tương tự trong Python mà cần phải được thực hiện trong C + + (mà không có ý nghĩa)? Liệu nó có liên quan đến cách mà python xử lý các kiểu biến so với C++ không? – gearhead
Tôi chưa bao giờ sử dụng phiên bản QF Python, nhưng trang doc dường như ngụ ý rằng Python không sử dụng Cracker. Tôi đoán bạn có thể đoán đúng vì lý do tại sao. Vì Python không được phân loại, bạn có thể chỉ cần gõ một câu lệnh switch trên trường 35 trong fromApp() và ném UnsupportedMessageType trong trường hợp mặc định cho bất kỳ kiểu nào bạn không muốn xử lý. Bạn sẽ tốt hơn khi hỏi những người dùng Python QF khác. Tôi biết họ đang ở ngoài kia, nhưng tôi không biết họ đi đâu. Có thể thử các diễn đàn (xem liên kết trên trang chủ QF)? –
@GrantBirchmeier cách bạn xử lý 4 = Thông báo SequenceReset – FutuToad