play with protos and service stub descriptors
This commit is contained in:
parent
3a6f7a36be
commit
7ab1af93e3
5 changed files with 188 additions and 4 deletions
38
proto/mvlc.proto
Normal file
38
proto/mvlc.proto
Normal file
|
@ -0,0 +1,38 @@
|
|||
syntax = "proto3";
|
||||
|
||||
import "google/rpc/status.proto";
|
||||
import "vme.proto";
|
||||
|
||||
option cc_generic_services = true;
|
||||
|
||||
package mesytec.mnode.mvlc;
|
||||
|
||||
message ReadRegisterRequest
|
||||
{
|
||||
uint32 address = 1;
|
||||
}
|
||||
|
||||
message WriteRegisterRequest
|
||||
{
|
||||
uint32 address = 1;
|
||||
uint32 value = 2;
|
||||
}
|
||||
|
||||
message WriteRegisterResponse
|
||||
{
|
||||
optional google.rpc.Status status = 1;
|
||||
}
|
||||
|
||||
message ReadRegisterResponse
|
||||
{
|
||||
optional uint32 value = 1;
|
||||
optional google.rpc.Status status = 2;
|
||||
}
|
||||
|
||||
service MVLC
|
||||
{
|
||||
rpc ReadRegister(ReadRegisterRequest) returns (ReadRegisterResponse);
|
||||
rpc WriteRegister(WriteRegisterRequest) returns (WriteRegisterResponse);
|
||||
rpc VMERead(mesytec.mnode.vme.ReadRequest) returns (mesytec.mnode.vme.ReadResponse);
|
||||
rpc VMEWrite(mesytec.mnode.vme.WriteRequest) returns (mesytec.mnode.vme.WriteResponse);
|
||||
}
|
|
@ -1,19 +1,33 @@
|
|||
syntax = "proto3";
|
||||
|
||||
import "google/protobuf/timestamp.proto";
|
||||
|
||||
option cc_generic_services = true;
|
||||
|
||||
package mesytec.mnode;
|
||||
|
||||
message SearchRequest {
|
||||
string query = 1;
|
||||
int32 page_number = 2;
|
||||
int32 results_per_page = 3;
|
||||
service PingService {
|
||||
rpc Ping(mesytec.mnode.Ping) returns (Pong);
|
||||
}
|
||||
|
||||
message Ping {
|
||||
int32 peer_id = 1;
|
||||
uint32 sequence_number = 2;
|
||||
google.protobuf.Timestamp timestamp = 3;
|
||||
}
|
||||
|
||||
message Pong {
|
||||
int32 peer_id = 1;
|
||||
uint32 sequence_number = 2;
|
||||
}
|
||||
service FooService {
|
||||
rpc Foo(FooRequest) returns (FooResponse);
|
||||
}
|
||||
|
||||
message FooRequest {
|
||||
int32 foo_value = 1;
|
||||
}
|
||||
|
||||
message FooResponse {
|
||||
int32 bar_value = 1;
|
||||
}
|
||||
|
|
78
proto/vme.proto
Normal file
78
proto/vme.proto
Normal file
|
@ -0,0 +1,78 @@
|
|||
syntax = "proto3";
|
||||
|
||||
import "google/rpc/status.proto";
|
||||
|
||||
option cc_generic_services = true;
|
||||
|
||||
package mesytec.mnode.vme;
|
||||
|
||||
enum DataWidth
|
||||
{
|
||||
D16 = 0;
|
||||
D32 = 1;
|
||||
}
|
||||
|
||||
message AddressModifier
|
||||
{
|
||||
uint32 value = 1;
|
||||
}
|
||||
|
||||
enum EsstRate
|
||||
{
|
||||
UNKNOWN = 0;
|
||||
RATE_160MB = 1;
|
||||
RATE_276MB = 2;
|
||||
RATE_320MB = 3;
|
||||
}
|
||||
|
||||
message ReadRequestOptions
|
||||
{
|
||||
optional bool late_read = 1;
|
||||
optional bool fifo_read = 2;
|
||||
optional bool swapped_read = 3;
|
||||
optional EsstRate esst_rate = 4;
|
||||
optional uint32 max_transfers = 5;
|
||||
}
|
||||
|
||||
message ReadRequest
|
||||
{
|
||||
uint32 address = 1;
|
||||
AddressModifier amod = 2;
|
||||
DataWidth width = 3;
|
||||
ReadRequestOptions options = 4;
|
||||
}
|
||||
|
||||
message WriteRequest
|
||||
{
|
||||
uint32 address = 1;
|
||||
uint32 value = 2;
|
||||
AddressModifier amod = 3;
|
||||
DataWidth width = 4;
|
||||
}
|
||||
|
||||
enum ResponseFlags
|
||||
{
|
||||
NONE = 0;
|
||||
TIMEOUT = 1;
|
||||
BUS_ERROR = 2;
|
||||
SYNTAX_ERROR = 3;
|
||||
}
|
||||
|
||||
message ReadResponse
|
||||
{
|
||||
repeated uint32 values = 1;
|
||||
optional ResponseFlags flags = 2;
|
||||
optional google.rpc.Status status = 3;
|
||||
}
|
||||
|
||||
message WriteResponse
|
||||
{
|
||||
optional ResponseFlags flags = 2;
|
||||
optional google.rpc.Status status = 3;
|
||||
}
|
||||
|
||||
service VmeAccess
|
||||
{
|
||||
rpc Read(ReadRequest) returns (ReadResponse);
|
||||
rpc Write(WriteRequest) returns (WriteResponse);
|
||||
}
|
|
@ -39,6 +39,7 @@ add_mnode_dev_executable(mesy_nng_sub_consumer)
|
|||
add_mnode_proto_dev_executable(mnode_proto_test1)
|
||||
add_mnode_proto_dev_executable(mnode_proto_ping_client)
|
||||
add_mnode_proto_dev_executable(mnode_proto_ping_server)
|
||||
add_mnode_proto_dev_executable(mnode_proto_rpc_ping_server)
|
||||
|
||||
#add_subdirectory(qt)
|
||||
|
||||
|
|
53
src/mnode_proto_rpc_ping_server.cc
Normal file
53
src/mnode_proto_rpc_ping_server.cc
Normal file
|
@ -0,0 +1,53 @@
|
|||
#include <memory>
|
||||
|
||||
#include <mesytec-mvlc/mesytec-mvlc.h>
|
||||
#include <mesytec-mvlc/util/signal_handling.h>
|
||||
#include "proto/service.pb.h"
|
||||
#include "proto/mvlc.pb.h"
|
||||
#include <mesytec-mnode/mnode_nng_async.h>
|
||||
#include "internal/argh.h"
|
||||
|
||||
using namespace mesytec;
|
||||
using namespace std::literals;
|
||||
|
||||
void print_service_descriptors(google::protobuf::Service &service)
|
||||
{
|
||||
auto sd = service.GetDescriptor();
|
||||
spdlog::info("service: full_name={}, index={}, method_count={}",
|
||||
sd->full_name(), sd->index(), sd->method_count());
|
||||
|
||||
for (int i = 0; i < sd->method_count(); ++i)
|
||||
{
|
||||
auto md = sd->method(i);
|
||||
auto it = md->input_type();
|
||||
auto ot = md->output_type();
|
||||
spdlog::info(" method: full_name={}, index={}, input_type={}, output_type={}",
|
||||
md->full_name(), md->index(), it->full_name(), ot->full_name());
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
namespace nng = mnode::nng;
|
||||
spdlog::set_level(spdlog::level::debug);
|
||||
|
||||
mnode::PingService_Stub pingService(nullptr);
|
||||
print_service_descriptors(pingService);
|
||||
|
||||
mnode::vme::VmeAccess_Stub vmeService(nullptr);
|
||||
print_service_descriptors(vmeService);
|
||||
|
||||
mnode::mvlc::MVLC_Stub mvlcService(nullptr);
|
||||
print_service_descriptors(mvlcService);
|
||||
|
||||
auto socket = nng::make_rep_socket();
|
||||
|
||||
if (int res = nng_listen(socket, "tcp://localhost:5555", nullptr, 0))
|
||||
{
|
||||
nng::mnode_nng_error("nng_listen", res);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in a new issue