From 72b4389be450a9f4ad08c3b0985612bef4fd328e Mon Sep 17 00:00:00 2001 From: Dario Date: Wed, 2 Sep 2020 14:06:23 +0200 Subject: [PATCH] use protobuf from inside grpc, even for parsing protofiles for easy version switch, fix html error --- CMakeLists.txt | 15 ++++++++++++++- README | 1 + conanfile.txt | 1 - compile_proto.sh => parse_proto.sh | 0 .../HTTPInterface/AdminHederaAccountPage.cpp | 17 ++++++++--------- src/cpp/controller/HederaAccount.cpp | 1 - src/cpp/controller/HederaRequest.cpp | 10 +++++++++- src/cpp/model/hedera/Query.cpp | 4 ++-- src/cpsp/adminHederaAccount.cpsp | 1 - windows_parse_proto.sh | 19 +++++++++++++++++++ 10 files changed, 53 insertions(+), 16 deletions(-) rename compile_proto.sh => parse_proto.sh (100%) mode change 100755 => 100644 create mode 100644 windows_parse_proto.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a24af9a3..fc2eb1771 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,8 @@ project(Gradido_LoginServer C CXX) SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin" ) SET ( CMAKE_CXX_FLAGS "-std=c++17" ) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) include_directories( "dependencies" @@ -12,6 +14,7 @@ include_directories( "dependencies/mariadb-connector-c/build/include" "dependencies/spirit-po/include" "dependencies/grpc/include" + "dependencies/grpc/third_party/protobuf/src" "src/cpp/proto" #"dependencies/mariadb-connector-c/build/include" #"dependencies/mariadb-connector-c/include" @@ -99,6 +102,7 @@ set(GRPC_ABSL_PATH "dependencies/grpc/_build/third_party/abseil-cpp/absl/types/D set(GRPC_CARES_PATH "dependencies/grpc/_build/third_party/cares/cares/lib/Debug") set(GRPC_BORING_SSL_PATH "dependencies/grpc/_build/third_party/boringssl-with-bazel/Debug") set(GRPC_RE2_PATH "dependencies/grpc/_build/third_party/re2/Debug") +set(GRPC_PROTOBUF_DEBUG_PATH "dependencies/grpc/_build/third_party/protobuf/Debug") find_library(GRPC_PLUSPLUS grpc++ PATHS ${GRPC_PATH} REQUIRED) find_library(GRPC_UNSECURE grpc++_unsecure PATHS ${GRPC_PATH} REQUIRED) find_library(GRPC_REFLECTION grpc++_reflection PATHS ${GRPC_PATH} REQUIRED) @@ -112,6 +116,9 @@ find_library(GRPC_CARES cares PATHS ${GRPC_CARES_PATH} REQUIRED) find_library(GRPC_BORING_SSL_CRYPTO crypto ${GRPC_BORING_SSL_PATH} REQUIRED) find_library(GRPC_BORING_SSL_SSL ssl ${GRPC_BORING_SSL_PATH} REQUIRED) find_library(GRPC_RE2 re2 ${GRPC_RE2_PATH} REQUIRED) +find_library(PROTOBUF_LIB_DEBUG libprotobufd ${GRPC_PROTOBUF_DEBUG_PATH} REQUIRED) +find_library(PROTOBUF_LIB_LITE_DEBUG libprotobuf-lited ${GRPC_PROTOBUF_DEBUG_PATH} REQUIRED) +find_library(PROTOBUF_LIBC_DEBUG libprotocd ${GRPC_PROTOBUF_DEBUG_PATH} REQUIRED) find_library(GRPC_ABSL_BAD_OPTIONAL_ACCESS absl_bad_optional_access ${GRPC_ABSL_PATH} REQUIRED) set(GRPC_LIBS @@ -123,6 +130,12 @@ set(GRPC_LIBS ${GRPC_BORING_SSL_SSL} ${GRPC_RE2} ) +set(PROTOBUF_DEBUG_LIBS + ${PROTOBUF_LIB_DEBUG} + ${PROTOBUF_LIB_LITE_DEBUG} + ${PROTOBUF_LIBC_DEBUG} +) + set(MYSQL_INCLUDE_DIR "dependencies/mariadb-connector-c/include") @@ -174,7 +187,7 @@ target_link_libraries(Gradido_LoginServer absl::base absl::flat_hash_map absl::f if(WIN32) TARGET_LINK_LIBRARIES(Gradido_LoginServer optimized ${MYSQL_LIBRARIES} Shlwapi) TARGET_LINK_LIBRARIES(Gradido_LoginServer debug ${COMPILED_MARIADB_CLIENT_DEBUG} Shlwapi) -TARGET_LINK_LIBRARIES(Gradido_LoginServer debug ${GRPC_LIBS}) +TARGET_LINK_LIBRARIES(Gradido_LoginServer debug ${GRPC_LIBS} ${PROTOBUF_DEBUG_LIBS}) else(WIN32) target_link_libraries(Gradido_LoginServer libmariadb protoc protobuf -pthread) endif(WIN32) diff --git a/README b/README index 89783a878..993dd4afa 100644 --- a/README +++ b/README @@ -25,6 +25,7 @@ mkdir _build cd _build cmake .. make +# under windows build at least release for protoc.exe and grpc c++ plugin cd ../../../ # get more dependencies with conan (need conan from https://conan.io/) diff --git a/conanfile.txt b/conanfile.txt index 96bd6f5c8..a6c09d9fa 100644 --- a/conanfile.txt +++ b/conanfile.txt @@ -1,7 +1,6 @@ [requires] Poco/1.9.4@pocoproject/stable libsodium/1.0.18@bincrafters/stable -protobuf/3.9.1@bincrafters/stable boost/1.71.0@conan/stable gtest/1.8.1@bincrafters/stable diff --git a/compile_proto.sh b/parse_proto.sh old mode 100755 new mode 100644 similarity index 100% rename from compile_proto.sh rename to parse_proto.sh diff --git a/src/cpp/HTTPInterface/AdminHederaAccountPage.cpp b/src/cpp/HTTPInterface/AdminHederaAccountPage.cpp index a9d4165c3..e98a02d92 100644 --- a/src/cpp/HTTPInterface/AdminHederaAccountPage.cpp +++ b/src/cpp/HTTPInterface/AdminHederaAccountPage.cpp @@ -264,16 +264,15 @@ void AdminHederaAccountPage::handleRequest(Poco::Net::HTTPServerRequest& request #line 172 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp" responseStream << ( hedera_account_model->getUpdatedString() ); responseStream << "\n"; - responseStream << "\t\t\t\t\t
\n"; responseStream << "\t\t\t\t\t\n"; responseStream << "\t\t\t\t
\n"; responseStream << "\t\t\t"; -#line 178 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp" +#line 177 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp" } responseStream << "\n"; responseStream << "\t\t\n"; responseStream << "\t\n"; @@ -282,7 +281,7 @@ void AdminHederaAccountPage::handleRequest(Poco::Net::HTTPServerRequest& request responseStream << "\t\n"; responseStream << "\t
\n"; responseStream << "\t\t
\n"; responseStream << "\t\t\t\n"; @@ -296,21 +295,21 @@ void AdminHederaAccountPage::handleRequest(Poco::Net::HTTPServerRequest& request responseStream << "\t\t\t\n"; responseStream << "\t\t\t\n"; responseStream << "\t\t\t\n"; responseStream << "\t
\n"; diff --git a/src/cpp/controller/HederaAccount.cpp b/src/cpp/controller/HederaAccount.cpp index 58c71b5ec..57cb14672 100644 --- a/src/cpp/controller/HederaAccount.cpp +++ b/src/cpp/controller/HederaAccount.cpp @@ -28,7 +28,6 @@ namespace controller { { auto db = new model::table::HederaAccount(); auto hedera_account_list = db->loadFromDB(fieldName, fieldValue, 2); - std::vector> resultVector; resultVector.reserve(hedera_account_list.size()); for (auto it = hedera_account_list.begin(); it != hedera_account_list.end(); it++) { diff --git a/src/cpp/controller/HederaRequest.cpp b/src/cpp/controller/HederaRequest.cpp index ec1c6c2a0..32c6772c6 100644 --- a/src/cpp/controller/HederaRequest.cpp +++ b/src/cpp/controller/HederaRequest.cpp @@ -1,6 +1,8 @@ #include "HederaRequest.h" #include "../proto/hedera/CryptoService.grpc.pb.h" +#include "../lib/DataTypeConverter.h" + #include #include #include @@ -22,16 +24,22 @@ HederaRequestReturn HederaRequest::request(model::hedera::Query* query) auto channel = grpc::CreateChannel(query->getConnectionString(), grpc::InsecureChannelCredentials()); grpc::ClientContext context; std::chrono::system_clock::time_point deadline = std::chrono::system_clock::now() + - std::chrono::milliseconds(100); + std::chrono::milliseconds(10000); context.set_deadline(deadline); + grpc::CompletionQueue cq; auto proto_query = query->getProtoQuery(); + auto proto_query_serialized = proto_query->SerializeAsString(); + auto query_hex_string = DataTypeConverter::binToHex((unsigned char*)proto_query_serialized.data(), proto_query_serialized.size()); + printf("[HederaRequest::request] query as hex: %s\n", query_hex_string.data()); proto::Response* response = nullptr; if (proto_query->has_cryptogetaccountbalance()) { auto stub = proto::CryptoService::NewStub(channel); auto connect_string = query->getConnectionString(); printf("try connection to hedera with: %s\n", connect_string.data()); + //auto stream = stub->PrepareAsynccryptoGetBalance(&context, *proto_query, &cq); auto status = stub->cryptoGetBalance(&context, *proto_query, response); + //stream->StartCall(); addError(new ParamError("Hedera Request", "crypto get balance", status.error_message())); printf("[HederaRequest::request] error details: %s\n", status.error_details().data()); } diff --git a/src/cpp/model/hedera/Query.cpp b/src/cpp/model/hedera/Query.cpp index d47449bc6..39b3700c4 100644 --- a/src/cpp/model/hedera/Query.cpp +++ b/src/cpp/model/hedera/Query.cpp @@ -25,7 +25,7 @@ namespace model { auto get_account_balance = query->mQueryProto.mutable_cryptogetaccountbalance(); accountId->copyToProtoAccountId(get_account_balance->mutable_accountid()); auto query_header = get_account_balance->mutable_header(); - query_header->set_responsetype(proto::ANSWER_ONLY); + query_header->set_responsetype(proto::COST_ANSWER); auto transaction = query_header->mutable_payment(); //auto transaction_body = transaction->mutable_body(); // body content @@ -48,7 +48,7 @@ namespace model { auto account_amounts = transfer_list->mutable_accountamounts(); account_amounts->Add(); auto account_amount = account_amounts->Mutable(0); - account_amount->set_amount(0); + account_amount->set_amount(1000); connection.hederaId->copyToProtoAccountId(account_amount->mutable_accountid()); return query; diff --git a/src/cpsp/adminHederaAccount.cpsp b/src/cpsp/adminHederaAccount.cpsp index b4fd1f485..5379e4ef4 100644 --- a/src/cpsp/adminHederaAccount.cpsp +++ b/src/cpsp/adminHederaAccount.cpsp @@ -170,7 +170,6 @@
<%= hedera_account_model->getBalanceDouble() %> hbar
<%= model::table::HederaAccount::hederaNetworkTypeToString(hedera_account_model->getNetworkType()) %>
<%= hedera_account_model->getUpdatedString() %>
-
diff --git a/windows_parse_proto.sh b/windows_parse_proto.sh new file mode 100644 index 000000000..4c5d56d47 --- /dev/null +++ b/windows_parse_proto.sh @@ -0,0 +1,19 @@ +#!/bin/bash +if [ ! -d "./src/cpp/proto" ] ; then + mkdir ./src/cpp/proto +fi +if [ ! -d "./src/cpp/proto/gradido" ] ; then + mkdir ./src/cpp/proto/gradido +fi +PROTOC_PATH=./dependencies/grpc/_build/third_party/protobuf/Release +CPP_PLUGIN_PATH=./dependencies/grpc/_build/Release +$PROTOC_PATH/protoc --cpp_out=./src/cpp/proto --proto_path=./src/proto ./src/proto/gradido/*.proto + +if [ ! -d "./src/cpp/proto/hedera" ] ; then + mkdir ./src/cpp/proto/hedera +fi + +GOOGLE_PROTOBUF_INCLUDES=./dependencies/grpc/third_party/protobuf/src +$PROTOC_PATH/protoc --plugin=protoc-gen-grpc=$CPP_PLUGIN_PATH/grpc_cpp_plugin.exe --cpp_out=./src/cpp/proto/hedera --grpc_out=./src/cpp/proto/hedera --proto_path=$GOOGLE_PROTOBUF_INCLUDES --proto_path=./src/proto/hedera/hedera-protobuf/src/main/proto ./src/proto/hedera/hedera-protobuf/src/main/proto/*.proto + +