FIX 4.0 Demo 1.0
Loading...
Searching...
No Matches
fix40::Application Class Referenceabstract

FIX 应用层抽象接口 More...

#include <application.hpp>

Inheritance diagram for fix40::Application:
Inheritance graph
Collaboration diagram for fix40::Application:
Collaboration graph

Public Member Functions

virtual ~Application ()=default
 虚析构函数
 
virtual void onLogon (const SessionID &sessionID)=0
 会话登录成功回调
 
virtual void onLogout (const SessionID &sessionID)=0
 会话登出回调
 
virtual void fromApp (const FixMessage &msg, const SessionID &sessionID)=0
 收到业务消息回调
 
virtual void toApp (FixMessage &msg, const SessionID &sessionID)
 发送业务消息前回调
 
virtual void fromAdmin (const FixMessage &msg, const SessionID &sessionID)
 收到管理消息回调
 
virtual void toAdmin (FixMessage &msg, const SessionID &sessionID)
 发送管理消息前回调
 
virtual IStoregetStore () const
 获取持久化存储接口(可选)
 

Detailed Description

FIX 应用层抽象接口

该接口将业务逻辑与 FIX 会话层分离。Session 负责处理会话层消息 (Logon、Logout、Heartbeat、TestRequest),而业务消息(如订单、 执行报告等)则委托给 Application 实现类处理。

回调分类
  • 业务消息回调:fromApp / toApp
  • 管理消息回调:fromAdmin / toAdmin
  • 生命周期回调:onLogon / onLogout
线程安全
Warning
Application 的回调方法可能被多个工作线程并发调用!

由于 FixServer 使用线程池,不同客户端连接绑定到不同工作线程, 当多个客户端同时发送消息时,fromApp() 会被并发调用。

推荐的线程安全实现方式:

  1. fromApp() 只做轻量操作:将消息封装后 push 到无锁队列
  2. 由独立的业务处理线程(如撮合引擎)从队列消费并处理
  3. 避免在 fromApp() 中执行耗时操作或持有锁
异常处理
Session 会捕获 Application 回调中抛出的异常,记录日志后继续运行。 但强烈建议在 Application 实现中自行处理异常,避免依赖外部捕获。
生命周期
Application 实例的生命周期应由 Server/Client 管理, 且必须比关联的 Session 更长。Session 仅持有裸指针。
使用示例
class MyTradingApp : public Application {
public:
void onLogon(const SessionID& sessionID) override {
LOG() << "Session logged on: " << sessionID.to_string();
}
void fromApp(const FixMessage& msg, const SessionID& sessionID) override {
// 推荐:只做轻量操作,push 到队列
order_queue_.enqueue({msg, sessionID});
}
};
FIX 应用层抽象接口
Definition application.hpp:116
FIX 消息的面向对象封装
Definition fix_codec.hpp:46
#define LOG()
日志输出宏
Definition logger.hpp:138
FIX 会话标识符
Definition application.hpp:28
std::string to_string() const
转换为字符串表示
Definition application.hpp:49

Constructor & Destructor Documentation

◆ ~Application()

virtual fix40::Application::~Application ( )
virtualdefault

虚析构函数

Member Function Documentation

◆ fromAdmin()

virtual void fix40::Application::fromAdmin ( const FixMessage msg,
const SessionID sessionID 
)
inlinevirtual

收到管理消息回调

Parameters
msg收到的 FIX 管理消息
sessionID消息来源的会话标识符

当收到会话层消息(Logon/Logout/Heartbeat/TestRequest)时调用。 默认实现为空,子类可选择性重写用于日志记录等。

Note
管理消息由 Session 自动处理,此回调仅用于通知

◆ fromApp()

virtual void fix40::Application::fromApp ( const FixMessage msg,
const SessionID sessionID 
)
pure virtual

收到业务消息回调

Parameters
msg收到的 FIX 业务消息
sessionID消息来源的会话标识符

当收到非会话层消息(MsgType 不是 A/0/1/5)时调用。 典型的业务消息包括:

  • D: NewOrderSingle(新订单)
  • F: OrderCancelRequest(撤单请求)
  • 8: ExecutionReport(执行报告)
Warning
可能被多个工作线程并发调用! 推荐实现:只做轻量操作,将消息 push 到无锁队列

Implemented in fix40::SimulationApp, and fix40::client::ClientApp.

Here is the caller graph for this function:

◆ getStore()

virtual IStore * fix40::Application::getStore ( ) const
inlinevirtual

获取持久化存储接口(可选)

用于让网络层/会话层组件以“依赖倒置”的方式获取持久化能力:

  • 当返回非空时,Session 可以将消息与会话序列号写入 store,用于断线恢复与 ResendRequest。
  • 默认实现返回 nullptr,表示当前 Application 不提供持久化能力。
Returns
IStore* 存储接口指针,可能为 nullptr

Reimplemented in fix40::SimulationApp.

◆ onLogon()

virtual void fix40::Application::onLogon ( const SessionID sessionID)
pure virtual

会话登录成功回调

Parameters
sessionID已建立的会话标识符

当 FIX 会话成功建立(收到 Logon 确认)后调用。 可用于初始化交易状态、订阅行情等。

Note
可能被多个工作线程并发调用

Implemented in fix40::SimulationApp, and fix40::client::ClientApp.

◆ onLogout()

virtual void fix40::Application::onLogout ( const SessionID sessionID)
pure virtual

会话登出回调

Parameters
sessionID即将断开的会话标识符

当 FIX 会话即将断开(收到 Logout 或连接关闭)时调用。 可用于清理交易状态、取消未完成订单等。

Note
可能被多个工作线程并发调用

Implemented in fix40::SimulationApp, and fix40::client::ClientApp.

Here is the caller graph for this function:

◆ toAdmin()

virtual void fix40::Application::toAdmin ( FixMessage msg,
const SessionID sessionID 
)
inlinevirtual

发送管理消息前回调

Parameters
msg即将发送的 FIX 管理消息(可修改)
sessionID发送消息的会话标识符

在发送 Logon/Logout/Heartbeat/TestRequest 前调用。 默认实现为空,子类可选择性重写用于日志记录等。

◆ toApp()

virtual void fix40::Application::toApp ( FixMessage msg,
const SessionID sessionID 
)
inlinevirtual

发送业务消息前回调

Parameters
msg即将发送的 FIX 业务消息(可修改)
sessionID发送消息的会话标识符

在业务消息发送前调用,可用于:

  • 记录审计日志
  • 添加/修改字段
  • 消息验证

默认实现为空,子类可选择性重写。

Note
可能被多个工作线程并发调用

Reimplemented in fix40::SimulationApp, and fix40::client::ClientApp.

Here is the caller graph for this function:

The documentation for this class was generated from the following file: