LCOV - code coverage report
Current view: top level - include/app/engine - order_event.hpp (source / functions) Coverage Total Hit
Test: coverage.info Lines: 93.3 % 30 28
Test Date: 2025-12-19 03:13:09 Functions: 100.0 % 6 6

            Line data    Source code
       1              : /**
       2              :  * @file order_event.hpp
       3              :  * @brief 订单事件定义
       4              :  *
       5              :  * 定义从 Application 传递到撮合引擎的订单事件结构。
       6              :  * 事件使用内部 Order 结构,与 FIX 协议解耦。
       7              :  */
       8              : 
       9              : #pragma once
      10              : 
      11              : #include <string>
      12              : #include <variant>
      13              : #include "app/model/order.hpp"
      14              : 
      15              : namespace fix40 {
      16              : 
      17              : /**
      18              :  * @enum OrderEventType
      19              :  * @brief 订单事件类型
      20              :  */
      21              : enum class OrderEventType {
      22              :     NEW_ORDER,       ///< 新订单
      23              :     CANCEL_REQUEST,  ///< 撤单请求
      24              :     SESSION_LOGON,   ///< 会话登录
      25              :     SESSION_LOGOUT   ///< 会话登出
      26              : };
      27              : 
      28              : /**
      29              :  * @struct OrderEvent
      30              :  * @brief 订单事件
      31              :  *
      32              :  * 封装从 Application 回调传递到撮合引擎的事件数据。
      33              :  * 使用内部数据结构(Order/CancelRequest),与 FIX 协议解耦。
      34              :  *
      35              :  * @par 数据流
      36              :  * 1. SimulationApp::fromApp() 收到 FixMessage
      37              :  * 2. 解析 FixMessage,转换为 Order 或 CancelRequest
      38              :  * 3. 封装为 OrderEvent,push 到队列
      39              :  * 4. MatchingEngine 消费 OrderEvent,处理内部结构
      40              :  */
      41              : struct OrderEvent {
      42              :     OrderEventType type;       ///< 事件类型
      43              :     SessionID sessionID;       ///< 来源会话标识
      44              :     std::string userId;        ///< 用户ID(从 Session 提取的真实身份)
      45              : 
      46              :     /// 事件数据(根据 type 使用不同类型)
      47              :     /// - NEW_ORDER: Order
      48              :     /// - CANCEL_REQUEST: CancelRequest
      49              :     /// - SESSION_LOGON/LOGOUT: std::monostate(无数据)
      50              :     std::variant<std::monostate, Order, CancelRequest> data;
      51              : 
      52              :     // =========================================================================
      53              :     // 构造函数
      54              :     // =========================================================================
      55              : 
      56              :     /**
      57              :      * @brief 默认构造函数
      58              :      */
      59           46 :     OrderEvent()
      60           46 :         : type(OrderEventType::SESSION_LOGON)
      61           46 :         , data(std::monostate{})
      62           46 :     {}
      63              : 
      64              :     /**
      65              :      * @brief 构造会话事件(登录/登出)
      66              :      */
      67            3 :     OrderEvent(OrderEventType t, const SessionID& sid, const std::string& uid = "")
      68            3 :         : type(t)
      69            3 :         , sessionID(sid)
      70            3 :         , userId(uid)
      71            3 :         , data(std::monostate{})
      72            3 :     {}
      73              : 
      74              :     /**
      75              :      * @brief 构造新订单事件
      76              :      * @param order 订单数据
      77              :      * @param uid 用户ID(从 Session 提取)
      78              :      */
      79            6 :     static OrderEvent newOrder(const Order& order, const std::string& uid) {
      80            6 :         OrderEvent event;
      81            6 :         event.type = OrderEventType::NEW_ORDER;
      82            6 :         event.sessionID = order.sessionID;
      83            6 :         event.userId = uid;
      84            6 :         event.data = order;
      85            6 :         return event;
      86            0 :     }
      87              : 
      88              :     /**
      89              :      * @brief 构造撤单事件
      90              :      * @param req 撤单请求
      91              :      * @param uid 用户ID(从 Session 提取)
      92              :      */
      93            2 :     static OrderEvent cancelRequest(const CancelRequest& req, const std::string& uid) {
      94            2 :         OrderEvent event;
      95            2 :         event.type = OrderEventType::CANCEL_REQUEST;
      96            2 :         event.sessionID = req.sessionID;
      97            2 :         event.userId = uid;
      98            2 :         event.data = req;
      99            2 :         return event;
     100            0 :     }
     101              : 
     102              :     // =========================================================================
     103              :     // 访问器
     104              :     // =========================================================================
     105              : 
     106              :     /**
     107              :      * @brief 获取订单数据(仅 NEW_ORDER 有效)
     108              :      * @return const Order* 订单指针,类型不匹配返回 nullptr
     109              :      */
     110            6 :     const Order* getOrder() const {
     111            6 :         return std::get_if<Order>(&data);
     112              :     }
     113              : 
     114              :     /**
     115              :      * @brief 获取撤单请求(仅 CANCEL_REQUEST 有效)
     116              :      * @return const CancelRequest* 撤单请求指针,类型不匹配返回 nullptr
     117              :      */
     118            1 :     const CancelRequest* getCancelRequest() const {
     119            1 :         return std::get_if<CancelRequest>(&data);
     120              :     }
     121              : };
     122              : 
     123              : } // namespace fix40
        

Generated by: LCOV version 2.0-1