2024-11-24 stan

下面我将对三个命令字(CMD_ORDER_DETAILCMD_MARKET_LISTCMD_MARKET_SUMMARY)进行综合分析。

交易查询命令字分析笔记

1. CMD_ORDER_DETAIL - 订单详情查询

1.1 业务逻辑流程

参考代码:

static int on_cmd_order_detail(nw_ses *ses, rpc_pkg *pkg, json_t *params)
{
    if (json_array_size(params) != 2)
        return reply_error_invalid_argument(ses, pkg);

    // market
    if (!json_is_string(json_array_get(params, 0)))
        return reply_error_invalid_argument(ses, pkg);
    const char *market_name = json_string_value(json_array_get(params, 0));
    market_t *market = get_market(market_name);
    if (market == NULL)
        return reply_error_invalid_argument(ses, pkg);

    // order_id
    if (!json_is_integer(json_array_get(params, 1)))
        return reply_error_invalid_argument(ses, pkg);
    uint64_t order_id = json_integer_value(json_array_get(params, 1));

    order_t *order = market_get_order(market, order_id);
    json_t *result = NULL;
    if (order == NULL) {
        result = json_null();
    } else {
        result = get_order_info(order);
    }

    int ret = reply_result(ses, pkg, result);
    json_decref(result);
    return ret;
}

1.2 数据结构和依赖

主要数据结构:

// 订单结构
typedef struct order_t {
    uint64_t id;           // 订单ID
    uint32_t type;         // 订单类型
    uint32_t side;         // 买卖方向
    uint32_t create_time;  // 创建时间
    uint32_t update_time;  // 更新时间
    uint32_t user_id;      // 用户ID
    char *market;          // 市场
    mpd_t *price;         // 价格
    mpd_t *amount;        // 数量
    mpd_t *left;          // 剩余数量
    // ...其他字段
} order_t;

主要依赖函数:

1.3 算法分析