wangzhengquan
2021-02-04 f7337200b6703c9d64f49efc0bc571a13d479973
add void * userdata
10个文件已修改
73 ■■■■■ 已修改文件
src/net/net_mod_socket.cpp 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/net/net_mod_socket.h 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/net/net_mod_socket_wrapper.cpp 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/net/net_mod_socket_wrapper.h 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/socket/shm_mod_socket.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/socket/shm_mod_socket.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/socket/shm_socket.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/socket/shm_socket.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test_net_socket/test_net_mod_socket.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test_net_socket/test_recvandsend.cpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/net/net_mod_socket.cpp
@@ -498,22 +498,12 @@
}
int NetModSocket::recvandsend(void **recvbuf, int *recvsize, int *key, recv_callback_fn callback,
                              const struct timespec *timeout , int flag, void * user_data ) {
int NetModSocket::recvandsend(void **recvbuf, int *recvsize, int *key, recv_callback_fn callback) {
  return shmModSocket.recvandsend( recvbuf, recvsize, key, callback);
  return shmModSocket.recvandsend( recvbuf, recvsize, key, callback, timeout, flag, user_data);
}
int NetModSocket::recvandsend_timeout(void **recvbuf, int *recvsize, int *key, recv_callback_fn callback,
                              const struct timespec *timeout ) {
  return shmModSocket.recvandsend( recvbuf, recvsize, key, callback, timeout, BUS_TIMEOUT_FLAG);
}
int NetModSocket::recvandsend_nowait(void **recvbuf, int *recvsize, int *key, recv_callback_fn callback) {
  return shmModSocket.recvandsend( recvbuf, recvsize, key, callback, NULL,  BUS_NOWAIT_FLAG);
}
/**
 * 发送请求信息并等待接收应答
src/net/net_mod_socket.h
@@ -193,11 +193,10 @@
  int sendandrecv_nowait( const void *send_buf, const int send_size, const int send_key, void **recv_buf, int *recv_size) ;
  int recvandsend(void **recvbuf, int *recvsize, int *key, recv_callback_fn callback) ;
  int recvandsend_timeout(void **recvbuf, int *recvsize, int *key, recv_callback_fn callback,
                                        const struct timespec *timeout );
  int recvandsend_nowait(void **recvbuf, int *recvsize, int *key, recv_callback_fn callback);
  int recvandsend(void **recvbuf, int *recvsize, int *key, recv_callback_fn callback,
                                        const struct timespec *timeout = NULL , int flag = 0, void * user_data = NULL );
  /**
   * 向node_arr 中的所有网络节点发布消息
src/net/net_mod_socket_wrapper.cpp
@@ -91,22 +91,22 @@
}
int net_mod_socket_recvandsend(void *_socket, void **recvbuf, int *recvsize, int *key, recv_callback_fn callback) {
int net_mod_socket_recvandsend(void *_socket, void **recvbuf, int *recvsize, int *key, recv_callback_fn callback, void * user_data) {
  NetModSocket *sockt = (NetModSocket *)_socket;
  return sockt->recvandsend( recvbuf, recvsize, key, callback);
  return sockt->recvandsend( recvbuf, recvsize, key, callback, NULL, 0, user_data);
}
int net_mod_socket_recvandsend_timeout(void *_socket, void **recvbuf, int *recvsize, int *key, recv_callback_fn callback,
                                       int sec, int nsec ) {
                                       int sec, int nsec, void * user_data) {
  NetModSocket *sockt = (NetModSocket *)_socket;
  struct timespec timeout = {sec, nsec};
  return sockt->recvandsend_timeout( recvbuf, recvsize, key, callback, &timeout);
  return sockt->recvandsend( recvbuf, recvsize, key, callback, &timeout, BUS_TIMEOUT_FLAG, user_data);
}
int net_mod_socket_recvandsend_nowait(void *_socket, void **recvbuf, int *recvsize, int *key, recv_callback_fn callback) {
int net_mod_socket_recvandsend_nowait(void *_socket, void **recvbuf, int *recvsize, int *key, recv_callback_fn callback, void * user_data) {
  NetModSocket *sockt = (NetModSocket *)_socket;
  return sockt->recvandsend_nowait( recvbuf, recvsize, key, callback);
  return sockt->recvandsend( recvbuf, recvsize, key, callback, NULL, BUS_NOWAIT_FLAG, user_data);
}
src/net/net_mod_socket_wrapper.h
@@ -128,12 +128,12 @@
 * @param recvbuf 接受到的消息存放的缓存地址,该buf使用完成后需要手动释放
 * @param recvsize 接受到消息的长度
 * @param key 从谁哪里收到的信息
 * @callback  void (*recv_callback_fn)(void **sendbuf, int *sendsize)
 * @callback  void (*recv_callback_fn)(void **sendbuf, int *sendsize, void * user_data)
 *            sendbuf 和 sendsize是callbak_fn回调函数的返回值, 分别表示返回的数据,和返回数据的长度。
 *
 * @return 0是成功, 其他值是失败的错误码
 */
int net_mod_socket_recvandsend(void *_socket, void **recvbuf, int *recvsize, int *key, recv_callback_fn callback);
int net_mod_socket_recvandsend(void *_socket, void **recvbuf, int *recvsize, int *key, recv_callback_fn callback, void * user_data);
/**
 * @brief 接受消息,并把callback函数返回的数据发送回对方,在指定的时间内即使没有完成也返回
@@ -141,7 +141,7 @@
 * @param recvbuf 接受到的消息存放的缓存地址,该buf使用完成后需要手动释放
 * @param recvsize 接受到消息的长度
 * @param key 从谁哪里收到的信息
 * @callback  void (*recv_callback_fn)(void **sendbuf, int *sendsize)
 * @callback  void (*recv_callback_fn)(void **sendbuf, int *sendsize, void * user_data)
 *            sendbuf 和 sendsize是callbak_fn回调函数的返回值, 分别表示返回的数据,和返回数据的长度。
 *
 * @param sec 秒
@@ -150,7 +150,7 @@
 * @return 0是成功, 其他值是失败的错误码
 */
int net_mod_socket_recvandsend_timeout(void *_socket, void **recvbuf, int *recvsize, int *key, recv_callback_fn callback,
                                      int sec, int nsec ) ;
                                      int sec, int nsec, void * user_data ) ;
/**
@@ -159,12 +159,12 @@
 * @param recvbuf 接受到的消息存放的缓存地址,该buf使用完成后需要手动释放
 * @param recvsize 接受到消息的长度
 * @param key 从谁哪里收到的信息
 * @callback  void (*recv_callback_fn)(void **sendbuf, int *sendsize)
 * @callback  void (*recv_callback_fn)(void **sendbuf, int *sendsize, void * user_data)
 *            sendbuf 和 sendsize是callbak_fn回调函数的返回值, 分别表示返回的数据,和返回数据的长度。
 *
 * @return 0是成功, 其他值是失败的错误码
 */
int net_mod_socket_recvandsend_nowait(void *_socket, void **recvbuf, int *recvsize, int *key, recv_callback_fn callback) ;
int net_mod_socket_recvandsend_nowait(void *_socket, void **recvbuf, int *recvsize, int *key, recv_callback_fn callback, void * user_data) ;
src/socket/shm_mod_socket.cpp
@@ -92,8 +92,8 @@
int ShmModSocket::recvandsend(void **recvbuf, int *recvsize, int *key, recv_callback_fn callback,
                    const struct timespec *timeout , int flag ) {
  int rv = shm_recvandsend(shm_socket, recvbuf, recvsize, key, callback, timeout, flag);
                    const struct timespec *timeout , int flag, void * user_data ) {
  int rv = shm_recvandsend(shm_socket, recvbuf, recvsize, key, callback, timeout, flag, user_data);
  if(rv == 0) {
    logger->debug("ShmModSocket::shm_recvandsend: success. key = %d\n", *key);
    return 0;
src/socket/shm_mod_socket.h
@@ -88,7 +88,7 @@
  int recvandsend(void **recvbuf, int *recvsize, int *key, recv_callback_fn callback,
                      const struct timespec *timeout = NULL , int flag = 0);
                      const struct timespec *timeout = NULL , int flag = 0, void * user_data = NULL);
    /**
     * 订阅指定主题
src/socket/shm_socket.cpp
@@ -247,7 +247,7 @@
 * 
 */
int shm_recvandsend(shm_socket_t *sockt, void **recvbuf, int *recvsize, int *key, recv_callback_fn callback, 
  const struct timespec *timeout, int flag) {
  const struct timespec *timeout, int flag, void *user_data) {
  
  int rv;
 
@@ -281,7 +281,7 @@
  mm_free(recvpak.buf);
  callback(&sendbuf, &sendsize);
  callback(&sendbuf, &sendsize, user_data);
  shm_packet_t sendpak;
  sendpak.key = sockt->key;
src/socket/shm_socket.h
@@ -42,7 +42,7 @@
} shm_socket_t;
// typedef void (*recv_callback_fn)(void **sendbuf, int *sendsize);
typedef std::function<void(void **sendbuf, int *sendsize)> recv_callback_fn;
typedef std::function<void(void **sendbuf, int *sendsize, void *user_data)> recv_callback_fn;
size_t shm_socket_remove_keys(int keys[], size_t length);
@@ -72,7 +72,7 @@
 *
 */
int shm_recvandsend(shm_socket_t *sockt, void **recvbuf, int *recvsize, int *key, recv_callback_fn callback,
                    const struct timespec *timeout = NULL, int flag = 0);
                    const struct timespec *timeout = NULL, int flag = 0,  void * user_data = NULL);
test_net_socket/test_net_mod_socket.cpp
@@ -143,7 +143,7 @@
  int rv;
  int key;
  while(true) {
    rv = net_mod_socket_recvandsend_timeout(ser, &recvbuf, &recvsize, &key, [&](void ** buf, int *size){
    rv = net_mod_socket_recvandsend_timeout(ser, &recvbuf, &recvsize, &key, [&](void ** buf, int *size, void * user_data){
    printf( "server: RECEIVED REQUEST FROM  %d : %s\n", key, recvbuf);
    sprintf(sendbuf, "%d RECEIVED %s", net_mod_socket_get_key(ser), (char *)recvbuf);
    // buf 和 size是返回值
@@ -151,7 +151,7 @@
    *size = strlen(sendbuf) + 1;
    free(recvbuf);
    return;
    }, 0, 2000000 );
    }, 0, 2000000, NULL );
  }
  // while ( (rv = net_mod_socket_recvfrom(ser, &recvbuf, &size, &key) ) == 0) {
  //  // printf( "server: RECEIVED REQUEST FROM  %d NAME %s\n", key, recvbuf);
test_net_socket/test_recvandsend.cpp
@@ -8,9 +8,9 @@
#include <getopt.h>
#include "logger_factory.h"
//测试传递函数指针
void sendback(void ** buf, int *size){
void sendback(void ** buf, int *size, void * user_data){
      char sendbuf[512];
    printf( "server: RECEIVED REQUEST FROM \n ");
    sprintf(sendbuf, "RECEIVED REQUEST \n");
@@ -30,7 +30,7 @@
  int rv;
  int key;
  while(true) {
    rv = net_mod_socket_recvandsend_timeout(ser, &recvbuf, &recvsize, &key, sendback, 2, 2000000 );
    rv = net_mod_socket_recvandsend_timeout(ser, &recvbuf, &recvsize, &key, sendback, 2, 2000000, NULL );
    if(rv == 0)
        free(recvbuf);
  }