From c95e44f010c06f82d95d4264a90ec230e4bf307e Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期二, 01 十二月 2020 17:52:08 +0800
Subject: [PATCH] add server socket

---
 bhomebus.go         |   33 ++++++++++++++++
 libcbhomebus.c      |   26 ++++++++++++
 libcbhomebus_func.h |   15 +++++++
 libcbhomebus.h      |   10 +++++
 4 files changed, 83 insertions(+), 1 deletions(-)

diff --git a/bhomebus.go b/bhomebus.go
index 50f2259..89b4645 100644
--- a/bhomebus.go
+++ b/bhomebus.go
@@ -577,3 +577,36 @@
 
 	return int(C.wrap_fn_socket_remove_keys(libbhomebus, ckey, C.int(len(keys))))
 }
+
+// ServerSocket tcp
+type ServerSocket struct {
+	socket unsafe.Pointer
+}
+
+// ServerOpen server
+func ServerOpen(port int) *ServerSocket {
+	if libbhomebus == nil {
+		return nil
+	}
+
+	sock := C.wrap_fn_server_socket_open(libbhomebus, C.int(port))
+	return &ServerSocket{sock}
+}
+
+// Close close
+func (s *ServerSocket) Close() {
+	if libbhomebus == nil {
+		return
+	}
+
+	C.wrap_fn_server_socket_close(libbhomebus, s.socket)
+}
+
+// Start start
+func (s *ServerSocket) Start() int {
+	if libbhomebus == nil {
+		return -1
+	}
+
+	return int(C.wrap_fn_server_socket_start(libbhomebus, s.socket))
+}
diff --git a/libcbhomebus.c b/libcbhomebus.c
index 9aa0240..9046a11 100644
--- a/libcbhomebus.c
+++ b/libcbhomebus.c
@@ -328,4 +328,28 @@
         check_with_ret(fn_socket_remove_keys, lib, -1);
     }
     return fn_socket_remove_keys((int*)keys, length);
-}
\ No newline at end of file
+}
+
+void *wrap_fn_server_socket_open(hbhomebus lib, int port){
+    if (!fn_server_socket_open){
+        fn_server_socket_open = (tfn_net_mod_server_socket_open)dlsym(lib, l_net_mod_server_socket_open);
+        check_with_ret(fn_server_socket_open, lib, NULL);
+    }
+    return fn_server_socket_open(port);
+}
+
+void wrap_fn_server_socket_close(hbhomebus lib, void* _socket){
+    if (!fn_server_socket_close){
+        fn_server_socket_close = (tfn_net_mod_server_socket_close)dlsym(lib, l_net_mod_server_socket_close);
+        check_only(fn_server_socket_close, lib);
+    }
+    fn_server_socket_close(_socket);
+}
+
+int wrap_fn_server_socket_start(hbhomebus lib, void* _socket){
+    if (!fn_server_socket_start){
+        fn_server_socket_start = (tfn_net_mod_server_socket_start)dlsym(lib, l_net_mod_server_socket_start);
+        check_with_ret(fn_server_socket_start, lib, -1);
+    }
+    return fn_server_socket_start(_socket);
+}
diff --git a/libcbhomebus.h b/libcbhomebus.h
index c43abc3..d637d63 100644
--- a/libcbhomebus.h
+++ b/libcbhomebus.h
@@ -44,6 +44,9 @@
 static tfn_shm_mod_socket_remove_key            fn_socket_remove_key = NULL;
 static tfn_shm_mod_socket_remove_keys           fn_socket_remove_keys = NULL;
 
+static tfn_net_mod_server_socket_open           fn_server_socket_open = NULL;
+static tfn_net_mod_server_socket_close          fn_server_socket_close = NULL;
+static tfn_net_mod_server_socket_start          fn_server_socket_start = NULL;
 //////////////////////////////////////////////////////////////////////
 
 // labels
@@ -82,6 +85,10 @@
 const static char l_net_mod_socket_free[] = "net_mod_socket_free";
 const static char l_shm_mod_socket_remove_key[] = "shm_mod_socket_remove_key";
 const static char l_shm_mod_socket_remove_keys[] = "shm_mod_socket_remove_keys";
+
+const static char l_net_mod_server_socket_open[] = "net_mod_server_socket_open";
+const static char l_net_mod_server_socket_close[] = "net_mod_server_socket_close";
+const static char l_net_mod_server_socket_start[] = "net_mod_server_socket_start";
 //////////////////////////////////////////////////////////////////////
 
 // dlopen dynamic library
@@ -129,6 +136,9 @@
 int wrap_fn_socket_remove_key(hbhomebus lib, int key);
 int wrap_fn_socket_remove_keys(hbhomebus lib, void *keys, int length);
 
+void *wrap_fn_server_socket_open(hbhomebus lib, int port);
+void wrap_fn_server_socket_close(hbhomebus lib, void* _socket);
+int wrap_fn_server_socket_start(hbhomebus lib, void* _socket);
 
 #ifdef __cplusplus
 }
diff --git a/libcbhomebus_func.h b/libcbhomebus_func.h
index f2cbbb7..83d663d 100644
--- a/libcbhomebus_func.h
+++ b/libcbhomebus_func.h
@@ -190,6 +190,21 @@
  */
 typedef int(*tfn_shm_mod_socket_remove_keys) (int*, int);
 
+/**
+ * 鍒涘缓
+ */
+typedef void *(*tfn_net_mod_server_socket_open)(int port) ;
+
+/**
+ * 鍏抽棴
+ */
+typedef void (*tfn_net_mod_server_socket_close)(void *_sockt) ;
+
+/**
+ * 鍚姩
+ */
+typedef int (*tfn_net_mod_server_socket_start)(void *_sockt);
+
 #ifdef __cplusplus
 }
 #endif

--
Gitblit v1.8.0