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