jimi-wzq
2021-01-12 48e47110397c894716525db219e53300c08f64dd
doxygen
3个文件已删除
1个文件已添加
9个文件已修改
954 ■■■■■ 已修改文件
Doxyfile 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
doc/使用指南.mk 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/queue/shm_queue_wrapper.cpp 208 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/queue/shm_queue_wrapper.h 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/shm/shm_mm_wraper.h 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/shm/shm_mm_wrapper.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/shm/shm_mm_wrapper.h 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/socket/bus_server_socket_wrapper.h 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/socket/net_mod_server_socket_wrapper.cpp 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/socket/net_mod_server_socket_wrapper.h 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/socket/net_mod_socket.h 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/socket/net_mod_socket_wrapper.cpp 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/socket/net_mod_socket_wrapper.h 368 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Doxyfile
@@ -32,7 +32,7 @@
# title of most generated pages and in a few other places.
# The default value is: My Project.
PROJECT_NAME           = "My Project"
PROJECT_NAME           = "BHomeBus接口文档"
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
# could be handy for archiving the generated documentation or if some version
@@ -58,7 +58,7 @@
# entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used.
OUTPUT_DIRECTORY       = doxygen
OUTPUT_DIRECTORY       = build/doc
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
# directories (in 2 levels) under the output directory of each output format and
@@ -140,7 +140,7 @@
# shortest path that makes the file name unique will be used
# The default value is: YES.
FULL_PATH_NAMES        = YES
FULL_PATH_NAMES        = NO
# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
# Stripping is only done if one of the specified strings matches the left-hand
@@ -242,7 +242,7 @@
# members will be omitted, etc.
# The default value is: NO.
OPTIMIZE_OUTPUT_FOR_C  = NO
OPTIMIZE_OUTPUT_FOR_C  = YES
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
# Python sources only. Doxygen will then generate output that is more tailored
@@ -422,7 +422,7 @@
# be included in the documentation.
# The default value is: NO.
EXTRACT_PRIVATE        = NO
EXTRACT_PRIVATE        = YES
# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
# scope will be included in the documentation.
@@ -434,7 +434,7 @@
# included in the documentation.
# The default value is: NO.
EXTRACT_STATIC         = NO
EXTRACT_STATIC         = YES
# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
# locally in source files will be included in the documentation. If set to NO,
@@ -512,7 +512,7 @@
# scope will be hidden.
# The default value is: NO.
HIDE_SCOPE_NAMES       = NO
HIDE_SCOPE_NAMES       = YES
# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
# append additional text to a page's title, such as Class Reference. If set to
@@ -551,7 +551,7 @@
# name. If set to NO, the members will appear in declaration order.
# The default value is: YES.
SORT_MEMBER_DOCS       = YES
SORT_MEMBER_DOCS       = NO
# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
# descriptions of file, namespace and class members alphabetically by member
@@ -796,7 +796,7 @@
# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl,
# *.vhd, *.vhdl, *.ucf, *.qsf, *.as and *.js.
FILE_PATTERNS          = *.h
FILE_PATTERNS          = *wrapper.h
# The RECURSIVE tag can be used to specify whether or not subdirectories should
# be searched for input files as well.
@@ -2012,7 +2012,7 @@
# The default value is: YES.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SEARCH_INCLUDES        = YES
SEARCH_INCLUDES        = NO
# The INCLUDE_PATH tag can be used to specify one or more directories that
# contain include files that are not input files but should be processed by the
@@ -2248,7 +2248,7 @@
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDE_GRAPH          = YES
INCLUDE_GRAPH          = NO
# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
# set to YES then doxygen will generate a graph for each documented file showing
@@ -2257,7 +2257,7 @@
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDED_BY_GRAPH      = YES
INCLUDED_BY_GRAPH      = NO
# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
# dependency graph for every global function or class method.
@@ -2424,4 +2424,4 @@
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_CLEANUP            = YES
DOT_CLEANUP            = YES
doc/ʹÓÃÖ¸ÄÏ.mk
@@ -3,7 +3,7 @@
    
## 1. BHomeBus包含的角色
- NetProxyService(网络代理服务): è´Ÿè´£è·¨æœºå™¨è½¬å‘发布或请求消息
- BusService( æ€»çº¿æœåŠ¡ï¼‰: å‘布订阅的路由,负责记录订阅者的消息并把发布者发布的消息转发给感兴趣的订阅者。
- BusService(总线服务): å‘布订阅的路由,负责记录订阅者的消息并把发布者发布的消息转发给感兴趣的订阅者。
- Pub/Sub Client(发布订阅客户端): å‘BusService发布消息或者在BusService上订阅感兴趣的消息
- Request/Reply Client ï¼ˆè¯·æ±‚应答客户端):向其他机器/进程发送请求消息或者从其他机器/进程接受应答消息
src/queue/shm_queue_wrapper.cpp
File was deleted
src/queue/shm_queue_wrapper.h
File was deleted
src/shm/shm_mm_wraper.h
File was deleted
src/shm/shm_mm_wrapper.cpp
@@ -1,4 +1,4 @@
#include "shm_mm_wraper.h"
#include "shm_mm_wrapper.h"
#include "mem_pool.h"
#include "hashtable.h"
src/shm/shm_mm_wrapper.h
New file
@@ -0,0 +1,41 @@
/**
 * @file
 *
 * @brief è´Ÿè´£å…±äº«å†…存的创建与销毁
 *
 */
#ifndef __SHM_MM_H__
#define __SHM_MM_H__
#ifdef __cplusplus
extern "C" {
#endif
/**
 * @brief åˆ›å»ºå¹¶åˆå§‹åŒ–共享内存
 * @param size å…±äº«å†…存大小, å•位M
 * @details åœ¨è¿›å…¥main方法的时候执行该方法,每个进程只需要调用一次
 */
void shm_mm_wrapper_init(int size);
/**
 * @brief é”€æ¯å…±äº«å†…å­˜
 * @details æ•´ä¸ªè¿›ç¨‹é€€å‡ºæ—¶éœ€è¦æ‰§è¡Œè¿™ä¸ªæ–¹æ³•,该方法首先会检查是否还有其他进程在使用该共享内存,如果还有其他进程在使用就只是detach,如果没有其他进程在使用则销毁整块内存。
 */
void shm_mm_wrapper_destroy();
/**
 * @brief åˆ†é…ä¸€ä¸ªkey给申请者
 * @return key值
 */
int shm_mm_wrapper_alloc_key();
#ifdef __cplusplus
}
#endif
#endif
src/socket/bus_server_socket_wrapper.h
@@ -1,3 +1,12 @@
/**
 * @file
 *
 * @brief æ€»çº¿æœåŠ¡ã€‚
 *
 * @details å‘布订阅服务的路由,负责记录订阅者的消息并把发布者发布的消息转发给感兴趣的订阅者
 */
#ifndef _BUS_SERVER_SOCKET_WRAPPER_H_
#define _BUS_SERVER_SOCKET_WRAPPER_H_
@@ -7,18 +16,20 @@
extern "C" {
#endif
/**
 * åˆ›å»º
 * @brief åˆ›å»º bus_server_socket
 * @return bus_server_socket å¥æŸ„
 */
void * bus_server_socket_wrapper_open();
/**
 * å…³é—­
 * @brief é”€æ¯ bus_server_socket
 */
void bus_server_socket_wrapper_close(void *_sockt);
/**
 * å¯åЍbus
 * @brief å¯åЍbus
 * 
 * @return 0 æˆåŠŸï¼Œ å…¶ä»–值 å¤±è´¥çš„错误码
*/
src/socket/net_mod_server_socket_wrapper.cpp
@@ -3,20 +3,18 @@
void *net_mod_server_socket_open(int port) {
    printf("====net_mod_server_socket_open\n");
    net_mod_server_socket_t *sockt = (net_mod_server_socket_t *)malloc(sizeof(net_mod_server_socket_t));
    sockt->sockt = new NetModServerSocket(port);
    NetModServerSocket *sockt = new NetModServerSocket(port);
    return (void *)sockt;
}
void net_mod_server_socket_close(void *_sockt) {
    printf("====net_mod_server_socket_close\n");
    net_mod_server_socket_t *sockt = (net_mod_server_socket_t *)_sockt;
    delete sockt->sockt;
    free(sockt);
    NetModServerSocket *sockt = (NetModServerSocket *)_sockt;
    delete sockt;
}
int net_mod_server_socket_start(void *_sockt) {
    net_mod_server_socket_t *sockt = (net_mod_server_socket_t *)_sockt;
    return sockt->sockt->start();
    NetModServerSocket *sockt = (NetModServerSocket *)_sockt;
    return sockt->start();
}
src/socket/net_mod_server_socket_wrapper.h
@@ -1,3 +1,11 @@
/**
 * @file
 *
 * @brief ç½‘络代理服务
 *
 * @details  è´Ÿè´£è·¨æœºå™¨è½¬å‘发布或请求消息
 */
#ifndef __NET_MOD_SERVER_SOCKET_H__
#define __NET_MOD_SERVER_SOCKET_H__
@@ -6,24 +14,23 @@
#ifdef __cplusplus
extern "C" {
#endif
struct net_mod_server_socket_t
{
    NetModServerSocket *sockt;
};
/**
 * åˆ›å»º
 * @brief åˆ›å»ºnet_mod_server_socket
 * @param port ç«¯å£å·
 * @return net_mod_server_socket å¥æŸ„
 */
void *net_mod_server_socket_open(int port) ;
/**
 * å…³é—­
 * @brief é”€æ¯net_mod_server_socket
 */
void net_mod_server_socket_close(void *_sockt) ;
/**
 * å¯åЍ
 * @brief å¯åŠ¨æœåŠ¡
 *
 * @return 0 success, å…¶ä»– failture
 */
int net_mod_server_socket_start(void *_sockt);
src/socket/net_mod_socket.h
@@ -107,21 +107,34 @@
  */
  int force_bind( int key);
  /**
   * å¦‚果建立连接的节点没有接受到消息会一直等待
   * @brief å¦‚果建立连接的节点没有接受到消息等待timeout的时间后返回
   *
   * å‘node_arr ä¸­çš„æ‰€æœ‰ç½‘络节点发送请求消息,节点的返回信息汇总并存储在recv_arr中
   * @node_arr ç½‘络节点组, @node_arr_len该数组长度.如果IP为空则为本地发送。
   * @send_buf å‘送的消息,@send_size è¯¥æ¶ˆæ¯ä½“的长度
   * @recv_arr è¿”回的应答消息组,@recv_arr_size è¯¥æ•°ç»„长度
   * @timeout ç­‰å¾…时间,单位是千分之一秒
   * @return æˆåŠŸå‘é€çš„èŠ‚ç‚¹çš„ä¸ªæ•°
   *
   * ä¼˜ç‚¹ï¼š1某个节点的故障不会阻塞其他节点。2 æ€§èƒ½å¥½ã€‚ 3 é‡‡ç”¨thread local技术即保证了线程安全,又可以使用连接池缓存连接
   */
  int sendandrecv(net_node_t *node_arr, int arrlen, void *send_buf, int send_size, 
    net_mod_recv_msg_t ** recv_arr, int *recv_arr_size) ;
  /**
   * å¦‚果建立连接的节点没有接受到消息等待timeout的时间后返回
   * å‘node_arr ä¸­çš„æ‰€æœ‰ç½‘络节点发送请求消息,节点的返回信息汇总并存储在recv_arr中
   * @node_arr ç½‘络节点组, @node_arr_len该数组长度.如果IP为空则为本地发送。
   * @send_buf å‘送的消息,@send_size è¯¥æ¶ˆæ¯ä½“的长度
   * @recv_arr è¿”回的应答消息组,@recv_arr_size è¯¥æ•°ç»„长度
   * @timeout ç­‰å¾…时间,单位是千分之一秒
  */
   * @return æˆåŠŸå‘é€çš„èŠ‚ç‚¹çš„ä¸ªæ•°
   * ä¼˜ç‚¹ï¼š1某个节点的故障不会阻塞其他节点。2 æ€§èƒ½å¥½ã€‚ 3 é‡‡ç”¨thread local技术即保证了线程安全,又可以使用连接池缓存连接
   */
  int sendandrecv_timeout(net_node_t *node_arr, int arrlen, void *send_buf, int send_size, 
    net_mod_recv_msg_t ** recv_arr, int *recv_arr_size, int  timeout);
src/socket/net_mod_socket_wrapper.cpp
@@ -8,8 +8,7 @@
 */
void * net_mod_socket_open() {
    printf("=====net_mod_socket_open\n");
    net_mod_socket_t *sockt = (net_mod_socket_t *)malloc(sizeof(net_mod_socket_t));
    sockt->sockt = new NetModSocket;
    NetModSocket *sockt = new NetModSocket;
    return (void *)sockt;
}
@@ -18,9 +17,8 @@
 */
void net_mod_socket_close(void *_socket) {
    printf("====net_mod_socket_close\n");
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    delete sockt->sockt;
    free(sockt);
    NetModSocket *sockt = (NetModSocket *)_socket;
    delete sockt;
}
 
@@ -30,8 +28,8 @@
 * @return 0 æˆåŠŸï¼Œ å…¶ä»–值 å¤±è´¥çš„错误码
*/
int net_mod_socket_bind(void * _socket, int port){
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->bind(port);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->bind(port);
}
/**
@@ -39,8 +37,8 @@
 * @return 0 æˆåŠŸï¼Œ å…¶ä»–值 å¤±è´¥çš„错误码
*/
int net_mod_socket_force_bind(void * _socket, int port) {
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->force_bind(port);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->force_bind(port);
}
/**
 * å‘送信息
@@ -48,18 +46,18 @@
 * @return 0 æˆåŠŸï¼Œ å…¶ä»–值 å¤±è´¥çš„错误码
 */
int net_mod_socket_sendto(void *_socket, const void *buf, const int size, const int port) {
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->sendto(buf, size, port);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->sendto(buf, size, port);
}
// å‘送信息超时返回。 @sec ç§’ ï¼Œ @nsec çº³ç§’
int net_mod_socket_sendto_timeout(void *_socket, const void *buf, const int size, const int port, int sec, int nsec){
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->sendto_timeout(buf, size, port, sec, nsec);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->sendto_timeout(buf, size, port, sec, nsec);
}
// å‘送信息立刻返回。
int net_mod_socket_sendto_nowait(void *_socket, const void *buf, const int size, const int port){
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->sendto_nowait(buf, size, port);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->sendto_nowait(buf, size, port);
}
/**
@@ -68,17 +66,17 @@
 * @return 0 æˆåŠŸï¼Œ å…¶ä»–值 å¤±è´¥çš„错误码
*/
int net_mod_socket_recvfrom(void *_socket, void **buf, int *size, int *port){
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->recvfrom(buf, size, port);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->recvfrom(buf, size, port);
}
// æŽ¥å—信息超时返回。 @sec ç§’ ï¼Œ @nsec çº³ç§’
int net_mod_socket_recvfrom_timeout(void *_socket, void **buf, int *size, int *port, int sec, int nsec){
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->recvfrom_timeout(buf, size, port, sec, nsec);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->recvfrom_timeout(buf, size, port, sec, nsec);
}
int net_mod_socket_recvfrom_nowait(void *_socket, void **buf, int *size, int *port){
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->recvfrom_nowait(buf, size, port);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->recvfrom_nowait(buf, size, port);
}
@@ -93,10 +91,29 @@
 * ä¼˜ç‚¹ï¼š1某个节点的故障不会阻塞其他节点。2性能好
 * ç¼ºç‚¹ï¼šä¸æ˜¯çº¿ç¨‹å®‰å…¨çš„, å³ä¸èƒ½æœ‰ä¸¤ä¸ªä»¥ä¸Šçš„线程同时使用这个对象的方法
 */
//*****************************************************************************
//
//! \brief Write one byte to special register
//!
//! This function is to write one byte to LIS302DL register,one byte will be
//! writen in appointed address.
//!
//! \param node_arr specifies the target register address.
//! \param send_buf is the data written to target register.
//!
//! \return Indicate the status of operation which can be one of the following
//! value \b SUCCESS or  \b FAILURE .
//!
//! \note This function is used by internal, user MUST NOT call it in your
//!  Application.
//
//*****************************************************************************
int net_mod_socket_sendandrecv(void *_socket, net_node_t *node_arr, int arrlen, void *send_buf, int send_size, 
  net_mod_recv_msg_t ** recv_arr, int *recv_arr_size){
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->sendandrecv(node_arr,  arrlen, send_buf,  send_size, recv_arr, recv_arr_size);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->sendandrecv(node_arr,  arrlen, send_buf,  send_size, recv_arr, recv_arr_size);
}
/**
 * å¦‚果建立连接的节点没有接受到消息等待timeout的时间后返回
@@ -104,14 +121,14 @@
*/
int net_mod_socket_sendandrecv_timeout(void *_socket, net_node_t *node_arr, int arrlen, void *send_buf, int send_size, 
  net_mod_recv_msg_t ** recv_arr, int *recv_arr_size,  int timeout){
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->sendandrecv_timeout(node_arr,  arrlen, send_buf,  send_size, recv_arr, recv_arr_size, timeout);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->sendandrecv_timeout(node_arr,  arrlen, send_buf,  send_size, recv_arr, recv_arr_size, timeout);
}
int net_mod_socket_sendandrecv_nowait(void *_socket, net_node_t *node_arr, int arrlen, void *send_buf, int send_size, 
  net_mod_recv_msg_t ** recv_arr, int *recv_arr_size) {
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->sendandrecv_nowait(node_arr,  arrlen, send_buf,  send_size, recv_arr, recv_arr_size);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->sendandrecv_nowait(node_arr,  arrlen, send_buf,  send_size, recv_arr, recv_arr_size);
}
 
@@ -124,16 +141,16 @@
 * @return æˆåŠŸå‘å¸ƒçš„èŠ‚ç‚¹çš„ä¸ªæ•°
 */
int net_mod_socket_pub(void *_socket, net_node_t *node_arr, int node_arr_len, char *topic, int topic_size, void *content, int content_size) {
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->pub(node_arr, node_arr_len, topic, topic_size, content, content_size);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->pub(node_arr, node_arr_len, topic, topic_size, content, content_size);
}
int net_mod_socket_pub_timeout(void *_socket, net_node_t *node_arr, int node_arr_len, char *topic, int topic_size, void *content, int content_size, int msec){
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->pub_timeout(node_arr, node_arr_len, topic, topic_size, content, content_size, msec);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->pub_timeout(node_arr, node_arr_len, topic, topic_size, content, content_size, msec);
}
int net_mod_socket_pub_nowait(void *_socket, net_node_t *node_arr, int node_arr_len, char *topic, int topic_size, void *content, int content_size){
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->pub_nowait(node_arr, node_arr_len, topic, topic_size, content, content_size);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->pub_nowait(node_arr, node_arr_len, topic, topic_size, content, content_size);
}
@@ -147,17 +164,17 @@
 * @port æ€»çº¿ç«¯å£
 */
int  net_mod_socket_sub(void * _socket, void *topic, int size) {
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->sub((char *)topic,  size,  SHM_BUS_KEY);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->sub((char *)topic,  size,  SHM_BUS_KEY);
}
// è¶…时返回。 @sec ç§’ ï¼Œ @nsec çº³ç§’
int  net_mod_socket_sub_timeout(void * _socket, void *topic, int size, int sec, int nsec){
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->sub_timeout((char *)topic,  size,  SHM_BUS_KEY, sec, nsec);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->sub_timeout((char *)topic,  size,  SHM_BUS_KEY, sec, nsec);
}
int  net_mod_socket_sub_nowait(void * _socket, void *topic, int size){
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->sub_nowait((char *)topic,  size,  SHM_BUS_KEY);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->sub_nowait((char *)topic,  size,  SHM_BUS_KEY);
}
@@ -168,17 +185,17 @@
 * @port æ€»çº¿ç«¯å£
 */
int  net_mod_socket_desub(void * _socket, void *topic, int size) {
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->desub((char *)topic,  size,  SHM_BUS_KEY);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->desub((char *)topic,  size,  SHM_BUS_KEY);
}
// è¶…时返回。 @sec ç§’ ï¼Œ @nsec çº³ç§’
int  net_mod_socket_desub_timeout(void * _socket, void *topic, int size, int sec, int nsec) {
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->desub_timeout((char *)topic,  size,  SHM_BUS_KEY, sec, nsec);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->desub_timeout((char *)topic,  size,  SHM_BUS_KEY, sec, nsec);
}
int  net_mod_socket_desub_nowait(void * _socket, void *topic, int size){
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->desub_nowait((char *)topic,  size,  SHM_BUS_KEY);
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->desub_nowait((char *)topic,  size,  SHM_BUS_KEY);
}
@@ -187,8 +204,8 @@
 * èŽ·å–soket端口号
 */
int net_mod_socket_get_key(void * _socket) {
    net_mod_socket_t *sockt = (net_mod_socket_t *)_socket;
    return sockt->sockt->get_key();
    NetModSocket *sockt = (NetModSocket *)_socket;
    return sockt->get_key();
}
src/socket/net_mod_socket_wrapper.h
@@ -1,3 +1,13 @@
/**
 * @file
 *
 * @brief å‘布订阅和请求应答的客户端
 *
 * @details å‘BusService发布消息或者在BusService上订阅感兴趣的消息
 */
#ifndef __NET_MOD_SOCKET_H__
#define __NET_MOD_SOCKET_H__
@@ -7,173 +17,311 @@
extern "C" {
#endif
struct net_mod_socket_t
{
    NetModSocket *sockt;
};
/************************************************
 *  åˆ›å»º net_mod_socket
 ***********************************************/
/**
 * @brief åˆ›å»º net_mod_socket
 * @return net_mod_socket å¥æŸ„
 */
void * net_mod_socket_open();
/************************************************
 * å…³é—­ net_mod_socket
 ***********************************************/
/**
 * @brief å…³é—­ net_mod_socket
 */
void net_mod_socket_close(void *_sockt);
/************************************************
 * ç»‘定端口到socket, å¦‚果不绑定则系统自动分配一个
 * @return 0 æˆåŠŸï¼Œ å…¶ä»–值 å¤±è´¥çš„错误码
***********************************************/
/**
 * @brief ç»‘定端口到socket, å¦‚果不绑定则系统自动分配一个
 *
 * @param key ç»‘定的key值
 * @return 0是成功,其他值是失败的错误码
 */
int net_mod_socket_bind(void * _socket, int key);
/************************************************
 * å¼ºåˆ¶ç»‘定端口到socket, é€‚用于程序非正常关闭的情况下,重启程序绑定原来还没释放的key
 * @return 0 æˆåŠŸï¼Œ å…¶ä»–值 å¤±è´¥çš„错误码
***********************************************/
/**
 * @brief å¼ºåˆ¶ç»‘定端口到socket, é€‚用于程序非正常关闭的情况下,重启程序绑定原来还没释放的key
 *
 * @return 0是成功, å…¶ä»–值是失败的错误码
 */
int net_mod_socket_force_bind(void * _socket, int key);
/************************************************
 * å‘送信息,发送完成才返回
 * @key å‘送给谁
 * @return 0 æˆåŠŸï¼Œ å…¶ä»–值 å¤±è´¥çš„错误码
 ***********************************************/
/**
 * @brief å‘送信息,发送完成才返回
 *
 * @param buf æ¶ˆæ¯å­˜æ”¾çš„缓存地址
 * @param size æ¶ˆæ¯é•¿åº¦
 * @param param key å‘送给谁
 *
 * @return 0是成功, å…¶ä»–值是失败的错误码
 */
int net_mod_socket_sendto(void *_socket, const void *buf, const int size, const int key);
/************************************************
 * å‘送信息, è¶…时返回。 @sec ç§’ ï¼Œ @nsec çº³ç§’
 ***********************************************/
/**
 * @brief  å‘送信息,在指定时间内没发送完成也返回。
 *
 * @param buf æ¶ˆæ¯å­˜æ”¾çš„缓存地址
 * @param size æ¶ˆæ¯é•¿åº¦
 * @param param key å‘送给谁
 * @param sec ç§’
 * @param nsec çº³ç§’
 *
 * @return 0是成功, å…¶ä»–值是失败的错误码
 */
int net_mod_socket_sendto_timeout(void *_socket, const void *buf, const int size, const int key, int sec, int nsec);
/************************************************
 * å‘送信息立刻返回。
 ***********************************************/
/**
 * @brief å‘送信息,无论是否发送完成立刻返回。
 *
 * @param buf æ¶ˆæ¯å­˜æ”¾çš„缓存地址
 * @param size æ¶ˆæ¯é•¿åº¦
 * @param param key å‘送给谁
 *
 * @return 0是成功, å…¶ä»–值是失败的错误码
 */
int net_mod_socket_sendto_nowait(void *_socket, const void *buf, const int size, const int key);
/************************************************
 * æŽ¥æ”¶ä¿¡æ¯
 * @key ä»Žè°å“ªé‡Œæ”¶åˆ°çš„信息
 * @return 0 æˆåŠŸï¼Œ å…¶ä»–值 å¤±è´¥çš„错误码
***********************************************/
/**
 * @brief ç­‰å¾…接收信息,直到有消息接受到才返回
 *
 * @param buf æŽ¥å—到的消息存放的缓存地址,该buf使用完成后需要手动释放
 * @param size æŽ¥å—到消息的长度
 * @param key ä»Žè°å“ªé‡Œæ”¶åˆ°çš„信息
 *
 * @return 0是成功, å…¶ä»–值是失败的错误码
 */
int net_mod_socket_recvfrom(void *_socket, void **buf, int *size, int *key);
// æŽ¥å—信息超时返回。 @sec ç§’ ï¼Œ @nsec çº³ç§’
/**
 * @brief ç­‰å¾…接收信息,在指定的时间内即使没有接受到消息也要返回
 *
 * @param buf æŽ¥å—到的消息存放的缓存地址,该buf使用完成后需要手动释放
 * @param size æŽ¥å—到消息的长度
 * @param key ä»Žè°å“ªé‡Œæ”¶åˆ°çš„信息
 * @param sec ç§’
 * @param nsec çº³ç§’
 *
 * @return 0是成功, å…¶ä»–值是失败的错误码
 */
int net_mod_socket_recvfrom_timeout(void *_socket, void **buf, int *size, int *key, int sec, int nsec);
/**
 * @brief ç­‰å¾…接收信息,直到有消息接受到才返回
 *
 * @param buf æŽ¥å—到的消息存放的缓存地址,该buf使用完成后需要手动释放
 * @param size æŽ¥å—到消息的长度
 * @param key ä»Žè°å“ªé‡Œæ”¶åˆ°çš„信息
 *
 * @return 0是成功,其他值是失败的错误码
 */
int net_mod_socket_recvfrom_nowait(void *_socket, void **buf, int *size, int *key);
/************************************************
 * å¦‚果建立连接的节点没有接受到消息会一直等待
/**
 * @brief è·¨æœºå™¨å‘送消息并接受返回的应答消息,直到发送完成才返回
 *
 * å‘node_arr ä¸­çš„æ‰€æœ‰ç½‘络节点发送请求消息,节点的返回信息汇总并存储在recv_arr中
 * @node_arr ç½‘络节点组, @node_arr_len该数组长度.如果IP为空则为本地发送。
 * @send_buf å‘送的消息,@send_size è¯¥æ¶ˆæ¯ä½“的长度
 * @recv_arr è¿”回的应答消息组,@recv_arr_size è¯¥æ•°ç»„长度
 * @param node_arr ç½‘络节点组,
 * @param node_arr_len该数组长度.如果IP为空则为本地发送。
 * @param send_buf å‘送的消息
 * @param send_size è¯¥æ¶ˆæ¯ä½“的长度
 * @param recv_arr è¿”回的应答消息数组
 * @param recv_arr_size è¿”回的应答消息数组长度
 *
 * @return æˆåŠŸå‘é€çš„èŠ‚ç‚¹çš„ä¸ªæ•°
 * ä¼˜ç‚¹ï¼š1某个节点的故障不会阻塞其他节点。2 æ€§èƒ½å¥½ã€‚ 3 é‡‡ç”¨thread local技术即保证了线程安全,又可以使用连接池缓存连接
 ***********************************************/
int net_mod_socket_sendandrecv(void *_sockt, net_node_t *node_arr, int arrlen, void *send_buf, int send_size,
 *
 */
extern int net_mod_socket_sendandrecv(void *_sockt, net_node_t *node_arr, int arrlen, void *send_buf, int send_size,
  net_mod_recv_msg_t ** recv_arr, int *recv_arr_size) ;
/************************************************
 * å¦‚果建立连接的节点没有接受到消息等待timeout的时间后返回
 * @timeout ç­‰å¾…时间,单位是千分之一秒
 ***********************************************/
/**
 * @brief è·¨æœºå™¨å‘送消息并接受返回的应答消息,在指定时间内即使没有发送完成也返回
 *
 * å‘node_arr ä¸­çš„æ‰€æœ‰ç½‘络节点发送请求消息,节点的返回信息汇总并存储在recv_arr中
 * @param node_arr ç½‘络节点组,
 * @param node_arr_len该数组长度.如果IP为空则为本地发送。
 * @param send_buf å‘送的消息
 * @param send_size è¯¥æ¶ˆæ¯ä½“的长度
 * @param recv_arr è¿”回的应答消息数组
 * @param recv_arr_size è¿”回的应答消息数组长度
 * @param timeout ç­‰å¾…æ—¶é—´(豪秒,即千分之一秒)
 *
 * @return æˆåŠŸå‘é€çš„èŠ‚ç‚¹çš„ä¸ªæ•°
 *
 */
int net_mod_socket_sendandrecv_timeout(void *_sockt, net_node_t *node_arr, int arrlen, void *send_buf, int send_size, 
  net_mod_recv_msg_t ** recv_arr, int *recv_arr_size, int timeout);
/************************************************
 * ä¸ç­‰å¾…立即返回
 ***********************************************/
/**
 * @brief è·¨æœºå™¨å‘送消息并接受返回的应答消息,不管是否发送完成立刻返回
 *
 * å‘node_arr ä¸­çš„æ‰€æœ‰ç½‘络节点发送请求消息,节点的返回信息汇总并存储在recv_arr中
 * @param node_arr ç½‘络节点组,
 * @param node_arr_len该数组长度.如果IP为空则为本地发送。
 * @param send_buf å‘送的消息
 * @param send_size è¯¥æ¶ˆæ¯ä½“的长度
 * @param recv_arr è¿”回的应答消息数组
 * @param recv_arr_size è¿”回的应答消息数组长度
 *
 * @return æˆåŠŸå‘é€çš„èŠ‚ç‚¹çš„ä¸ªæ•°
 *
 */
int net_mod_socket_sendandrecv_nowait(void *_sockt, net_node_t *node_arr, int arrlen, void *send_buf, int send_size, 
  net_mod_recv_msg_t ** recv_arr, int *recv_arr_size) ;
 /************************************************
 * å‘node_arr ä¸­çš„æ‰€æœ‰ç½‘络节点发布消息
 * @node_arr ç½‘络节点组, @node_arr_len该数组长度
 * @topic ä¸»é¢˜ï¼Œ@topic_size è¯¥ä¸»é¢˜çš„长度
 * @content å†…容,@content_size å†…容长度
 * @return æˆåŠŸå‘å¸ƒçš„èŠ‚ç‚¹çš„ä¸ªæ•°
 ***********************************************/
 /**
  * @brief å‘node_arr中的所有网络节点发布消息
  *
  * @param node_arr ç½‘络节点组, @node_arr_len该数组长度
  * @param topic ä¸»é¢˜ï¼Œ
  * @param topic_size è¯¥ä¸»é¢˜çš„长度
  * @param content å†…容,
  * @param content_size å†…容长度
  *
  * @return æˆåŠŸå‘å¸ƒçš„èŠ‚ç‚¹çš„ä¸ªæ•°
  */
int net_mod_socket_pub(void *_sockt, net_node_t *node_arr, int node_arr_len, char *topic, int topic_size, void *content, int content_size);
/************************************************
 * å‘布消息超时后返回
 * @msec æ¯«ç§’(千分之一秒)
 ***********************************************/
/**
  * @brief å‘node_arr中的所有网络节点发布消息,在指定时间内即使没有发布完成也返回
  *
  * @param node_arr ç½‘络节点组, @node_arr_len该数组长度
  * @param topic ä¸»é¢˜ï¼Œ
  * @param topic_size è¯¥ä¸»é¢˜çš„长度
  * @param content å†…容,
  * @param content_size å†…容长度
  * @param msec è¶…时时间(毫秒,既千分之一秒)
  *
  * @return æˆåŠŸå‘å¸ƒçš„èŠ‚ç‚¹çš„ä¸ªæ•°
  */
int net_mod_socket_pub_timeout(void *_sockt, net_node_t *node_arr, int node_arr_len, char *topic, int topic_size, void *content, int content_size, int msec);
/************************************************
 * å‘布消息不管成功与否立刻返回
 * @msec æ¯«ç§’(千分之一秒)
 ***********************************************/
/**
  * @brief å‘node_arr中的所有网络节点发布消息,不管是否发布完成立刻返回
  *
  * @param node_arr ç½‘络节点组, @node_arr_len该数组长度
  * @param topic ä¸»é¢˜ï¼Œ
  * @param topic_size è¯¥ä¸»é¢˜çš„长度
  * @param content å†…容,
  * @param content_size å†…容长度
  *
  * @return æˆåŠŸå‘å¸ƒçš„èŠ‚ç‚¹çš„ä¸ªæ•°
  */
int net_mod_socket_pub_nowait(void *_sockt, net_node_t *node_arr, int node_arr_len, char *topic, int topic_size, void *content, int content_size);
/************************************************
 * è®¢é˜…指定主题
 * @topic ä¸»é¢˜
 * @size ä¸»é¢˜é•¿åº¦
 * @key æ€»çº¿ç«¯å£
 ***********************************************/
int  net_mod_socket_sub(void * _socket, void *topic, int size);
/************************************************
 * è®¢é˜…消息,超时返回。
 * @sec ç§’ ï¼Œ @nsec çº³ç§’
 ***********************************************/
int  net_mod_socket_sub_timeout(void * _socket, void *topic, int size,  int sec, int nsec);
/************************************************
 * è®¢é˜…消息,不管成功与否立刻返回。
/**
 * @brief è®¢é˜…感兴趣主题的消息
 *
 ***********************************************/
 * @param topic ä¸»é¢˜
 * @param size ä¸»é¢˜é•¿åº¦
 *
 * @return  0是成功,其他值是失败的错误码
 *
 */
int  net_mod_socket_sub(void * _socket, void *topic, int size);
/**
 * @brief è®¢é˜…感兴趣主题的消息, åœ¨æŒ‡å®šçš„æ—¶é—´å†…即使未完成订阅也返回
 *
 * @param topic ä¸»é¢˜
 * @param size ä¸»é¢˜é•¿åº¦
 * @param sec ç§’
 * @param nsec çº³ç§’
 *
 * @return  0是成功,其他值是失败的错误码
 */
int  net_mod_socket_sub_timeout(void * _socket, void *topic, int size,  int sec, int nsec);
/**
 * @brief è®¢é˜…感兴趣主题的消息,不管是否完成订阅立刻返回
 *
 * @param topic ä¸»é¢˜
 * @param size ä¸»é¢˜é•¿åº¦
 *
 * @return  0是成功,其他值是失败的错误码
 *
 */
int  net_mod_socket_sub_nowait(void * _socket, void *topic, int size);
/************************************************
 * å–消订阅指定主题
 * @topic ä¸»é¢˜,主题为空时取消全部订阅
 * @size ä¸»é¢˜é•¿åº¦
 * @key æ€»çº¿ç«¯å£
 ***********************************************/
/**
 * @brief å–消订阅指定主题
 *
 * @param topic ä¸»é¢˜,主题为空时取消全部订阅
 * @param size ä¸»é¢˜é•¿åº¦
 *
 * @return  0是成功,其他值是失败的错误码
 */
int  net_mod_socket_desub(void * _socket, void *topic, int size);
/************************************************
 * å–消订阅指定主题 è¶…时返回。
 * @sec ç§’ ï¼Œ @nsec çº³ç§’
 ***********************************************/
/**
 * @brief å–消订阅指定主题,在指定时间内即使未完成取消订阅任务也返回
 *
 * @param topic ä¸»é¢˜,主题为空时取消全部订阅
 * @param size ä¸»é¢˜é•¿åº¦
 * @param sec ç§’
 * @param nsec çº³ç§’
 *
 * @return  0是成功,其他值是失败的错误码
 */
int  net_mod_socket_desub_timeout(void * _socket, void *topic, int size, int sec, int nsec);
/************************************************
 * å–消订阅指定主题 ä¸ç®¡æˆåŠŸä¸Žå¦ç«‹åˆ»è¿”å›žã€‚
 ***********************************************/
/**
 * @brief å–消订阅指定主题,不管是否完成取消订阅任务都要立刻返回
 *
 * @param topic ä¸»é¢˜,主题为空时取消全部订阅
 * @param size ä¸»é¢˜é•¿åº¦
 *
 * @return  0是成功,其他值是失败的错误码
 */
int  net_mod_socket_desub_nowait(void * _socket, void *topic, int size);
/************************************************
 * èŽ·å–soket端口号
 ***********************************************/
/**
 * @brief èŽ·å–soket的key
 * @return key
 */
int net_mod_socket_get_key(void * _socket) ;
/************************************************
 * é”€æ¯sendandrecv方法返回的消息组
 * @arr æ¶ˆæ¯ç»„
 * @size æ¶ˆæ¯ç»„的长度
 ***********************************************/
/**
 * @brief é”€æ¯sendandrecv方法返回的消息组
 *
 * @param arr æ¶ˆæ¯ç»„
 * @param size æ¶ˆæ¯ç»„的长度
 */
void  net_mod_socket_free_recv_msg_arr(net_mod_recv_msg_t * arr, int size);
/************************************************
 * é‡Šæ”¾å­˜å‚¨æŽ¥æ”¶ä¿¡æ¯çš„buf
 ***********************************************/
/**
 * @brief é‡Šæ”¾å­˜å‚¨æŽ¥æ”¶ä¿¡æ¯çš„buf
 */
void net_mod_socket_free(void *buf) ;
/************************************************
 * åˆ é™¤key对应的共享队列,并在bus里删除该key的订阅
 ***********************************************/
/**
 * @brief åˆ é™¤key对应的共享队列,并在bus里删除该key的订阅
 *
 * @return åˆ é™¤çš„key的数量
 */
int shm_mod_socket_remove_key(int key);
/************************************************
 * æ‰¹é‡åˆ é™¤key对应的共享队列,并在bus里删除该key的订阅
 ***********************************************/
/**
 * @brief æ‰¹é‡åˆ é™¤key对应的共享队列,并在bus里删除该key的订阅
 *
 * @return åˆ é™¤çš„key的数量
 */
int shm_mod_socket_remove_keys(int keys[], int length);
#ifdef __cplusplus