fusion/common/xbuf/xbuf.h

85 lines
1.8 KiB
C
Executable File

/*************************************************
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 <stdint.h>
#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__ */