diff --git a/examples/python/client.py b/examples/python/client.py new file mode 100644 index 0000000000000000000000000000000000000000..d6dd7aa6f49b253faed34d709bcf30b7f33f4272 --- /dev/null +++ b/examples/python/client.py @@ -0,0 +1,89 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- + +""" +Copyright (c) 2023 Huawei Technologies Co., Ltd. All rights reserved. +secDetector is licensed under Mulan PSL v2. +You can use this software according to the terms and conditions of the Mulan PSL v2. +You may obtain a copy of Mulan PSL v2 at: + http://license.coscl.org.cn/MulanPSL2 +THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +See the Mulan PSL v2 for more details. + +Author: zhangguanghzhi +Create: 2023-10-18 +Description: secDetector example python client file +""" + +import ctypes +import time +import threading +from threading import Thread + +DATA_LEN = 1024 + +secDetectorsdklib = ctypes.cdll.LoadLibrary('/usr/lib64/secDetector/libsecDetectorsdk.so') + +g_cli_reader = ctypes.c_void_p +g_cli_reader_lock = threading.Lock() + +secDetectorsdklib.secSub.argtypes = [ctypes.c_int] +secDetectorsdklib.secSub.restype = ctypes.c_void_p +secDetectorsdklib.secUnsub.argtypes = [ctypes.c_int, ctypes.c_void_p] +secDetectorsdklib.secUnsub.restype = None +secDetectorsdklib.secReadFrom.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_int] +secDetectorsdklib.secReadFrom.restype = None + + +def thread_func_sub_and_read(num=0): + global g_cli_reader + + cli_reader = secDetectorsdklib.secSub(1) + g_cli_reader_lock.acquire() + g_cli_reader = cli_reader + g_cli_reader_lock.release() + + data = ctypes.create_string_buffer(DATA_LEN) + data_len = ctypes.c_int(DATA_LEN) + secDetectorsdklib.secReadFrom(cli_reader, data, data_len) + print("client read data:{}".format(data.value.decode())) + + while True: + if data.value.decode() == 'end': + print("client received end") + break + time.sleep(3) + secDetectorsdklib.secReadFrom(cli_reader, data, data_len) + print("client while read data:{}".format(data.value.decode())) + + print("client thread_func_sub_and_read end") + +def thread_func_unsub(num=0): + global g_cli_reader + g_cli_reader_lock.acquire() + try: + secDetectorsdklib.secUnsub(1, g_cli_reader) + finally: + g_cli_reader_lock.release() + print("client thread_func_unsub end") + +threadlist = [] + +tsub_read = Thread(target=thread_func_sub_and_read,args=(1,)) +tsub_read.start() + +time.sleep(5) +tunsub = Thread(target=thread_func_unsub,args=(2,)) +tunsub.start() + +threadlist.append(tsub_read) +threadlist.append(tunsub) + +for t in threadlist: + t.join() + +print("client end") + + diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 3c1f4cce470c03bba903c3e340e970ec8f7f240d..7a98a2afd33464d8e8cf8f3c1af3657016569d04 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -3,10 +3,9 @@ cmake_minimum_required(VERSION 3.14.1) project(secDetector_sdk) set(CMAKE_CXX_FALAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++ -g") -set(SDK_LINK_FLAGS "--lgrpc++ -lgrpc -lprotobuf -lpthread -wl,--no-as-needed -lgrpc++_reflection -wl,--as-needed -ldl") set(SDK_SRC secDetector_sdk.cpp ../observer_agent/grpc_comm/comm_api.grpc.pb.o ../observer_agent/grpc_comm/comm_api.pb.o) add_library(secDetectorsdk SHARED ${SDK_SRC}) -set_target_properties(secDetectorsdk PROPERTIES LINK_FALSGS "${SDK_LINK_FLAGS}") -target_include_directories(secDetectorsdk PROVATE ./ ../observer_agent/grpc_comm/) +target_include_directories(secDetectorsdk PRIVATE ./ ../observer_agent/grpc_comm/) +target_link_libraries(secDetectorsdk PRIVATE grpc++ grpc protobuf pthread grpc++_reflection dl) diff --git a/lib/secDetector_sdk.cpp b/lib/secDetector_sdk.cpp index 65efceb6e67bc64931915caa9c431c6de428be8b..bc696d9d26dc724b0a43646b95c2e5df93eb600a 100644 --- a/lib/secDetector_sdk.cpp +++ b/lib/secDetector_sdk.cpp @@ -20,7 +20,7 @@ using namespace std; static string server_address("unix:///var/run/secDetector.sock"); -static PubSubClient g_client(grpc::CreateChannel(server_address, grpc::InsecureChannelCredentials)); +static PubSubClient g_client(grpc::CreateChannel(server_address, grpc::InsecureChannelCredentials())); using Readmap = map>>; static Readmap g_reader_map; @@ -48,7 +48,7 @@ void PubSubClient::Publish(const int topic, const string &context) grpc::Status status = stub_->Publish(&pub_context, request, &msg); if (!status.ok()) { - cerr << "Publish Error: " << status.error.code() << ": " << status.error_message() << endl; + cerr << "Publish Error: " << status.error_code() << ": " << status.error_message() << endl; } } @@ -59,12 +59,12 @@ void PubSubClient::UnSubscribe(const int topic) ClientContext context; Message msg; - grpc::Status status = stub_->UnSubscibe(&context, request, &msg); + grpc::Status status = stub_->UnSubscribe(&context, request, &msg); SubFlag = false; if (!status.ok()) { - cerr << "UnSubscribe Error: " << status.error.code() << ": " << status.error_message() << endl; + cerr << "UnSubscribe Error: " << status.error_code() << ": " << status.error_message() << endl; } cout << "UnSubsccribe Received: " << msg.text() << endl; @@ -86,8 +86,8 @@ extern "C" { void *secSub(const int topic) { - unique_ptr> reader = g_clinet.Subscribe(topic); - void * ret_reader = static(reader.get()); + unique_ptr> reader = g_client.Subscribe(topic); + void * ret_reader = static_cast(reader.get()); g_reader_map.insert(Readmap::value_type(ret_reader, move(reader))); return ret_reader; @@ -95,10 +95,10 @@ void *secSub(const int topic) void secUnsub(const int topic, void *reader) { - g_client.Publih(topic, "end"); + g_client.Publish(topic, "end"); g_client.UnSubscribe(topic); - Readmao::iterator iter = g_reader_map.find(reader); + Readmap::iterator iter = g_reader_map.find(reader); if (iter != g_reader_map.end()) { g_reader_map.erase(iter); } @@ -108,7 +108,7 @@ void secReadFrom(void *reader, char *data, int data_len) { string msg(""); - Readmao::iterator iter = g_reader_map.find(reader); + Readmap::iterator iter = g_reader_map.find(reader); if (iter != g_reader_map.end()) { msg = g_client.ReadFrom(iter->second); } diff --git a/observer_agent/grpc_comm/Makefile b/observer_agent/grpc_comm/Makefile index 2947dd53e407dc6c0927ebd21fec01e99ab19f86..850137808c9d41710df2514654177ddcac75b3b4 100644 --- a/observer_agent/grpc_comm/Makefile +++ b/observer_agent/grpc_comm/Makefile @@ -18,7 +18,7 @@ HOST_SYSTEM = $(shell uname | cut -f 1 -d_) SYSTEM ?= $(HOST_SYSTEM) CXX = g++ CPPFLAGS += `pkg-config --cflags protobuf grpc` -CXXFLAGS += -std=c++11 +CXXFLAGS += -std=c++11 -fPIC ifeq ($(SYSTEM),Darwin) LDFLAGS += -L/usr/local/lib `pkg-config --libs protobuf grpc++`\ -pthread\