/************************************************* File name : xbuf.h Module : Author : amir Version : 0.1 Created on : 2024-04-27 Description : buf for protocol transmission 协议间传输 Modify History: 1. Date: Author: Modification: *************************************************/ #ifndef __XBUF__ #define __XBUF__ #include #include "kpacket.h" #include "iobuffer.h" typedef struct{ uint16_t event; uint32_t (*on_event)(const kpacket *packet); }packet_event; typedef struct{ /** * @brief 当接收完整一包kpacket, 触发回调 * * @param [in] box, box的地址. * * */ void (*on_packet)(const kpacket *packet); packet_event *ev_list; uint16_t ev_list_sz; /* private data*/ iobuffer read_io; /* 高阶应用 * 1. iobuffer_iobuffer_reserve(&read_io, 4096); // 设置iobuffer的缓冲大小 * 2. recv(read_io.iodata, read_io.capacity - read_io.size); xbuf_flush(); // 直接将数据读到iobuffer里,并尝试触发回调 **/ }xbuf_handler; uint32_t xbuf_init(xbuf_handler *hdlr); uint32_t xbuf_deinit(xbuf_handler *hdlr); /** * @brief 入数据处理, 满足包条件时触发on_packet回调 * * @param [in] hdlr, 外部保存的xbuf_handler. * @param [in] data, 入数. * @param [in] sz, 入数长度. * @note 成长返回OK, 返回NG内存不足--查一下read_io的capacity和size. * */ uint32_t xbuf_put(xbuf_handler *hdlr, const char *data, const uint32_t sz); /** * @brief 尝试主动触发回调 * * @param [in] hdlr, 外部保存的xbuf_handler. * @note 成长返回OK, 返回NG内存不足--查一下read_io的capacity和size. * */ uint32_t xbuf_flush(xbuf_handler *hdlr); void xbuf_test(); #endif /* __XBUF__ */