#pragma once
#include "xlt_quote_data_type.h"

namespace x1 {
    enum QuoteMCType : uint16_t {
        XLT_SSE_L1 = 1,                     ///< XLIGHT上交所L1行情频道组播组
        XLT_SZSE_L1 = 2,                    ///< XLIGHT深交所L1行情频道组播组

        HPF_SSE_L2_STOCK_SNAP = 101,        ///< 盛立上交所L2股票快照频道组播组
        HPF_SSE_L2_STOCK_TICK = 102,        ///< 盛立上交所L2股票逐笔频道组播组
        HPF_SSE_L2_INDEX = 103,             ///< 盛立上交所L2指数快照频道组播组
        HPF_SSE_L2_BOND_SNAP = 104,         ///< 盛立上交所L2债券快照频道组播组
        HPF_SSE_L2_BOND_TICK = 105,         ///< 盛立上交所L2债券逐笔频道组播组
        HPF_SZSE_L2_STOCK_SNAP = 106,       ///< 盛立深交所L2股票快照频道组播组
        HPF_SZSE_L2_STOCK_TICK = 107,       ///< 盛立深交所L2股票逐笔频道组播组
        HPF_SZSE_L2_INDEX = 108,            ///< 盛立深交所L2指数快照频道组播组
        HPF_SZSE_L2_BOND_SNAP = 109,        ///< 盛立深交所L2债券快照频道组播组
        HPF_SZSE_L2_BOND_TICK = 110,        ///< 盛立深交所L2债券逐笔频道组播组
    };

    enum QuoteRxMode: uint8_t {
        RX_MODE_AUTO = 0,                   ///< 自动选择行情接收模式，优先使用EFVI，如果EFVI不可用则回退到内核socket模式
        RX_MODE_SOCKET = 1,                 ///< 使用内核socket接收行情数据
        RX_MODE_EFVI = 2,                   ///< 使用EFVI接收行情数据
    };

    typedef struct quote_thread_t {
        int cpu_affinity = -1;              ///< 线程CPU亲和力设置，-1表示不设置亲和力，0表示绑定到CPU0，1表示绑定到CPU1，以此类推
        bool busy_poll = false;             ///< 纯忙等模式，为true时收包空闲使用_mm_pause纯用户态自旋，不产生syscall；为false时使用sched_yield让出CPU。绑定隔离核场景建议设为true。
        uint16_t mc_count = 0;              ///< 线程负责接收的行情组播数量，决定了mc_types列表的长度
        QuoteMCType mc_types[64];           ///< 线程负责接收的行情组播类型列表，每个组播类型对应一条行情组播地址记录
    }quote_thread_t;
}