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