From f7337200b6703c9d64f49efc0bc571a13d479973 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期四, 04 二月 2021 09:58:27 +0800
Subject: [PATCH] add void * userdata

---
 src/socket/shm_mod_socket.h             |    2 
 test_net_socket/test_recvandsend.cpp    |    6 +-
 src/net/net_mod_socket_wrapper.cpp      |   12 +++---
 src/net/net_mod_socket_wrapper.h        |   12 +++---
 src/net/net_mod_socket.h                |    7 +--
 test_net_socket/test_net_mod_socket.cpp |    4 +-
 src/socket/shm_socket.h                 |    4 +-
 src/socket/shm_mod_socket.cpp           |    4 +-
 src/net/net_mod_socket.cpp              |   18 ++-------
 src/socket/shm_socket.cpp               |    4 +-
 10 files changed, 31 insertions(+), 42 deletions(-)

diff --git a/src/net/net_mod_socket.cpp b/src/net/net_mod_socket.cpp
index f939c67..e1b30d7 100644
--- a/src/net/net_mod_socket.cpp
+++ b/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);
-
-}
+ 
 
 /**
  * 鍙戦�佽姹備俊鎭苟绛夊緟鎺ユ敹搴旂瓟
diff --git a/src/net/net_mod_socket.h b/src/net/net_mod_socket.h
index 5b2e930..7d64bb1 100644
--- a/src/net/net_mod_socket.h
+++ b/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 );
 
   /**
    * 鍚憂ode_arr 涓殑鎵�鏈夌綉缁滆妭鐐瑰彂甯冩秷鎭�
diff --git a/src/net/net_mod_socket_wrapper.cpp b/src/net/net_mod_socket_wrapper.cpp
index 6f244af..72fd0d2 100644
--- a/src/net/net_mod_socket_wrapper.cpp
+++ b/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);
 }
 
 
diff --git a/src/net/net_mod_socket_wrapper.h b/src/net/net_mod_socket_wrapper.h
index 2f73c7b..deacf4a 100644
--- a/src/net/net_mod_socket_wrapper.h
+++ b/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鏄痗allbak_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 鎺ュ彈娑堟伅锛屽苟鎶奵allback鍑芥暟杩斿洖鐨勬暟鎹彂閫佸洖瀵规柟锛屽湪鎸囧畾鐨勬椂闂村唴鍗充娇娌℃湁瀹屾垚涔熻繑鍥�
@@ -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鏄痗allbak_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鏄痗allbak_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) ;
 
 
 
diff --git a/src/socket/shm_mod_socket.cpp b/src/socket/shm_mod_socket.cpp
index 097c8fb..32ff061 100644
--- a/src/socket/shm_mod_socket.cpp
+++ b/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;
diff --git a/src/socket/shm_mod_socket.h b/src/socket/shm_mod_socket.h
index b866f0c..c0bd3d4 100644
--- a/src/socket/shm_mod_socket.h
+++ b/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);
 
 	/**
 	 * 璁㈤槄鎸囧畾涓婚
diff --git a/src/socket/shm_socket.cpp b/src/socket/shm_socket.cpp
index bee4622..fbb849d 100644
--- a/src/socket/shm_socket.cpp
+++ b/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;
diff --git a/src/socket/shm_socket.h b/src/socket/shm_socket.h
index 377ba4e..aa5fc90 100644
--- a/src/socket/shm_socket.h
+++ b/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);
 
 
 
diff --git a/test_net_socket/test_net_mod_socket.cpp b/test_net_socket/test_net_mod_socket.cpp
index 2c69151..bdbcc9b 100644
--- a/test_net_socket/test_net_mod_socket.cpp
+++ b/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);
diff --git a/test_net_socket/test_recvandsend.cpp b/test_net_socket/test_recvandsend.cpp
index 2211a4e..cb2ac1e 100644
--- a/test_net_socket/test_recvandsend.cpp
+++ b/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);
   }

--
Gitblit v1.8.0