QuickFix资料收集
来源:互联网 发布:linux下查看文件大小 编辑:程序博客网 时间:2024/06/06 00:41
项目地址http://www.quickfixengine.org/:
1.开始:
大多数我们关系的消息都会到达我们重载的fromApp函数中。你可以从具有不同类型(type)安全度的消息中得到field。这里的type指的是Fix消息的type。当程序传给你一个Message类,C++ type checker不知道它是神马特定的Fix消息,你必须动态决定。然而,这里有个办法使C++知道类型信息。首先,我们会介绍如何从消息中动态查询fields,然后我们将展示更好的类型安全方式。记住:所有消息都有头header和尾trailer。如果你想在里面看他们的fields,你必须首先调用getHeader() or getTrailer()来获取他们。否则没戏。
1.2最弱类型安全:
这种收集数据的方法被强烈建议不去使用,而且只在为一些其他语言或者中间件写底层接口时有用。
这里有一些收集数据的代码片段:
void fromApp( const FIX::Message& message, const FIX::SessionID& sessionID ) throw( FIX::FieldNotFound&, FIX::IncorrectDataFormat&, FIX::IncorrectTagValue&, FIX::UnsupportedMessageType& ) { // retreive value into string with integer field ID std::string value; value = message.getField(44); // retrieve value into a field base with integer field ID FIX::FieldBase field(44, ""); message.getField(field); // retreive value with an enumeration, a little better message.getField(FIX::FIELD::Price); }
一种增加一些类型安全的方法是用一个field类来表示所有的Fix定义Fields。这在程序中有时有用,但只在无版本依赖的代码片段中有用。比如,我们的session类在这用的最多。在多数程序中不推荐用它。这也将得到一些field,不只是string。
void fromApp( const FIX::Message& message, const FIX::SessionID& sessionID ) throw( FIX::FieldNotFound&, FIX::IncorrectDataFormat&, FIX::IncorrectTagValue&, FIX::UnsupportedMessageType& ) { // retreive value into field class FIX::Price price; message.getField(price); // another field... FIX::ClOrdID clOrdID; message.getField(clOrdID); }
1.4 最高安全(这样做)
QuickFIX有用来收集协议定义的所有消息的消息类。他们就如同field类,由Fix协议直接产生。利用这种优势,你必须用提供的MessageCracker来分解出消息。而且我们不在用泛型消息类,现在我们用using来代替getField。记住:你仍能像这些类从消息导出数据一样用getField来导出数据。
void fromApp( const FIX::Message& message, const FIX::SessionID& sessionID ) throw( FIX::FieldNotFound&, FIX::IncorrectDataFormat&, FIX::IncorrectTagValue&, FIX::UnsupportedMessageType& ) { crack(message, sessionID); } void onMessage( const FIX42::NewOrderSingle& message, const FIX::SessionID& ) { FIX::ClOrdID clOrdID; message.get(clOrdID); FIX::ClearingAccount clearingAccount; message.get(clearingAccount); } void onMessage( const FIX41::NewOrderSingle& message, const FIX::SessionID& ) { FIX::ClOrdID clOrdID; message.get(clOrdID); // compile time error!! field not defined in FIX41 FIX::ClearingAccount clearingAccount; message.get(clearingAccount); } void onMessage( const FIX42::OrderCancelRequest& message, const FIX::SessionID& ) { FIX::ClOrdID clOrdID; message.get(clOrdID); // compile time error!! field not defined for OrderCancelRequest FIX::Price price; message.get(price); }
你必须用MessageCracker作为maxin来用上面的方法。它将为你提供crack函数,允许你重载这个消息函数。任何你没有重载的函数将会利用default ,而且遇到未定义类型会抛出异常。
你可以这样定义你的程序:
#include "quickfix/Application.h" #include "quickfix/MessageCracker.h" class MyApplication : public FIX::Application, public FIX::MessageCracker
- QuickFix资料收集
- QuickFix
- 资料收集
- 资料收集
- 资料收集
- 资料收集
- 资料收集
- 资料收集
- 资料收集
- 收集资料。。。
- 资料收集
- 资料收集
- 资料收集
- 资料收集
- 资料收集
- 资料收集
- 资料收集
- 资料收集
- (unknown): x.x.x.x:2376 Status: Pending ID:
- 快速取模运算
- 'ascii' codec can't encode characters in position 34-41: ordinal not in range(128)处理
- Myeclipse 10 for Mac安装破解及其SVN插件安装
- problem compiling libjingle
- QuickFix资料收集
- 终于搭建起虚机环境
- 2013年春节那点事
- hdu 3496
- 清除windows访问局域网时保留的缓存用户名和密码
- Delphi之Windows Taskbar API 编程,包括任务栏进度条,图标覆盖,任务栏缩略图,跳转列表
- 我的新年作品之-平台架构
- libjingle mac 编译错误 解决方案 (..完善中..)
- sgi allocate