#ifndef _c_libshm_queue_so_func_h_
|
#define _c_libshm_queue_so_func_h_
|
|
|
#ifdef __cplusplus
|
extern "C"{
|
#endif
|
|
/**
|
* 初始化共享内存
|
* @size 共享内存大小
|
*
|
*/
|
typedef void(*tfn_shm_init)(int);
|
/**
|
* 销毁共享内存
|
* 整个进程退出时需要执行这个方法,该方法首先会检查是否还有其他进程在使用该共享内存,如果还有其他进程在使用就只是detach,如果没有其他进程在使用则销毁整块内存。
|
*/
|
typedef void(*tfn_shm_destroy)();
|
/**
|
* 获取key
|
*/
|
typedef int(*tfn_shm_alloc_key) ();
|
|
//移除不包含在keys中的队列
|
typedef void (*tfn_shm_rm_dead_queue)(void *keys, int length);
|
|
/**
|
* 创建队列
|
* @ shmqueue
|
* @ key 标识共享队列的唯一标识, key是一个指针里面存储了key的值, 如果key的值为-1系统会自动分配一个key值并把该key的值赋给key指针。如果key的值不会空会检查是否有重复绑定的情况, 有重复就报错没有就创建队列并绑定key.
|
* @ queue_size 队列大小
|
*/
|
typedef void*(*tfn_queue_create) (int*, int);
|
/**
|
* 绑定key到队列,但是并不会创建队列。如果没有对应指定key的队列提示错误并返回空值
|
*/
|
typedef void*(*tfn_queue_attach) (int);
|
/**
|
* 销毁
|
*/
|
typedef void(*tfn_queue_drop) (void*);
|
/**
|
* 队列元素的个数
|
*/
|
typedef int(*tfn_queue_size) (void*);
|
/**
|
* 是否已满
|
* * @return 1是, 0否
|
*/
|
typedef int(*tfn_queue_full) (void*);
|
/**
|
* 是否为空
|
* @return 1是, 0否
|
*/
|
typedef int(*tfn_queue_empty) (void*);
|
/**
|
* 入队, 队列满时等待.
|
* @return 1 入队成功, 0 入队失败
|
*/
|
typedef int(*tfn_queue_push) (void*, void*, int);
|
/**
|
* 入队, 队列满时立即返回.
|
* @return 1 入队成功, 0 入队失败
|
*/
|
typedef tfn_queue_push tfn_queue_push_nowait;
|
/**
|
* 入队, 指定时间内入队不成功就返回
|
* @sec 秒
|
* @nsec 纳秒
|
* @return 1 入队成功, 0 入队失败
|
*/
|
typedef int(*tfn_queue_push_timeout) (void*, void*, int, int, int);
|
/**
|
* 出队, 队列空时等待
|
* @return 1 出队成功, 0出队失败
|
*/
|
typedef int(*tfn_queue_pop) (void*, void**, int *);
|
/**
|
* 出队, 队列空时立即返回
|
* @return 1 出队成功, 0出队失败
|
*/
|
typedef tfn_queue_pop tfn_queue_pop_nowait;
|
/**
|
* 出队, 指定时间内出队不成功就返回
|
* @sec秒
|
* @nsec纳秒
|
* @return 1 出队成功, 0出队失败
|
*/
|
typedef int(*tfn_queue_pop_timeout) (void*, void**, int *, int, int);
|
/**
|
* 释放出队分配的内存
|
*/
|
typedef void (*tfn_queue_free_poped)(void *ptr);
|
|
////////////////////////////
|
// socket mode
|
////////////////////////////
|
enum socket_mod_t
|
{
|
PULL_PUSH = 1,
|
REQ_REP = 2,
|
PAIR = 3,
|
PUB_SUB = 4,
|
SURVEY = 5,
|
BUS = 6
|
|
};
|
|
/**
|
* 创建socket
|
* @return socket地址
|
*/
|
typedef void*(*tfn_socket_open) (int);
|
/**
|
* 关闭socket
|
*/
|
typedef int(*tfn_socket_close) (void*);
|
/**
|
* 绑定端口到socket, 如果不绑定则系统自动分配一个
|
* @return 0 成功, 其他值 失败的错误码
|
*/
|
typedef int(*tfn_socket_bind) (void*, int);
|
/**
|
* 服务端开启连接监听
|
* @return 0 成功, 其他值 失败的错误码
|
*/
|
typedef int(*tfn_socket_listen) (void*);
|
/**
|
* 客户端发起连接请求
|
*/
|
typedef int(*tfn_socket_connect) (void*, int);
|
/**
|
* 发送信息
|
* @return 0 成功, 其他值 失败的错误码
|
*/
|
typedef int(*tfn_socket_send) (void*, const void*, const int);
|
/**
|
* 接收信息
|
* @return 0 成功, 其他值 失败的错误码
|
*/
|
typedef int(*tfn_socket_recv) (void*, void**, int*);
|
|
/**
|
* 释放接收信息的buf
|
*/
|
typedef void(*tfn_socket_buf_free) (void*);
|
|
/**
|
* 获取soket端口号
|
*/
|
typedef int(*tfn_socket_port) (void*);
|
|
//////////////////////////////////////////////
|
// dgram socket
|
/**
|
* 创建socket
|
* @return socket地址
|
*/
|
typedef void*(*tfn_dgram_socket_open) ();
|
/**
|
* 关闭socket
|
* @return 0 成功, 其他值 失败的错误码
|
*/
|
typedef int(*tfn_dgram_socket_close) (void*);
|
/**
|
* 绑定端口到socket, 如果不绑定则系统自动分配一个
|
* @return 0 成功, 其他值 失败的错误码
|
*/
|
typedef int(*tfn_dgram_socket_bind) (void*, int);
|
typedef tfn_dgram_socket_bind tfn_dgram_socket_force_bind;
|
/**
|
* 发送信息
|
* @port 发送给谁
|
* @return 0 成功, 其他值 失败的错误码
|
*/
|
typedef int(*tfn_dgram_socket_sendto) (void*, const void*, const int, const int);
|
// 发送信息超时返回。 @sec 秒 , @nsec 纳秒
|
typedef int(*tfn_dgram_socket_sendto_timeout) (void*, const void*, const int, const int, int, int);
|
// 发送信息立刻返回。
|
typedef tfn_dgram_socket_sendto tfn_dgram_socket_sendto_nowait;
|
/**
|
* 接收信息
|
* @port 从谁哪里收到的信息
|
* @return 0 成功, 其他值 失败的错误码
|
*/
|
typedef int(*tfn_dgram_socket_recvfrom) (void*, void**, int*, int*);
|
typedef int(*tfn_dgram_socket_recvfrom_timeout) (void*, void**, int*, int*, int, int);
|
typedef tfn_dgram_socket_recvfrom tfn_dgram_socket_recvfrom_nowait;
|
/**
|
* 发送请求信息并等待接收应答
|
* @port 发送给谁
|
* @return 0 成功, 其他值 失败的错误码
|
*/
|
typedef int(*tfn_dgram_socket_sendandrecv) (void*, const void*, const int, const int, void**, int*);
|
typedef int(*tfn_dgram_socket_sendandrecv_timeout) (void*, const void*, const int, const int, void**, int*, int, int);
|
typedef tfn_dgram_socket_sendandrecv tfn_dgram_socket_sendandrecv_nowait;
|
/**
|
* 启动bus
|
*
|
* @return 0 成功, 其他值 失败的错误码
|
*/
|
typedef int(*tfn_dgram_socket_start_bus) (void*);
|
/**
|
* 订阅指定主题
|
* @topic 主题
|
* @size 主题长度
|
* @port 总线端口
|
*/
|
typedef int(*tfn_dgram_socket_sub) (void*, void*, int, int);
|
typedef int(*tfn_dgram_socket_sub_timeout) (void*, void*, int, int, int, int);
|
typedef tfn_dgram_socket_sub tfn_dgram_socket_sub_nowait;
|
/**
|
* 发布主题
|
* @topic 主题
|
* @content 主题内容
|
* @port 总线端口
|
*/
|
typedef int(*tfn_dgram_socket_pub) (void*, void*, int, void*, int, int);
|
typedef int(*tfn_dgram_socket_pub_timeout) (void*, void*, int, void*, int, int, int, int);
|
typedef tfn_dgram_socket_pub tfn_dgram_socket_pub_nowait;
|
/**
|
* 获取soket端口号
|
*/
|
typedef int(*tfn_dgram_socket_port) (void*);
|
/**
|
* 释放存储接收信息的buf
|
*/
|
typedef void(*tfn_dgram_socket_free) (void*);
|
|
|
#ifdef __cplusplus
|
}
|
#endif
|
|
#endif
|