Viam C++ SDK current
Loading...
Searching...
No Matches
api.hpp
1// Note that a `Gizmo` is implemented with `MyGizmo` in impl.hpp and impl.cpp.
2#pragma once
3
4#include <grpcpp/channel.h>
5#include <vector>
6
7#include <viam/sdk/common/utils.hpp>
8#include <viam/sdk/config/resource.hpp>
11
12#include "gizmo.grpc.pb.h"
13#include "gizmo.pb.h"
14
15using namespace viam::sdk;
16using namespace viam::component::gizmo::v1;
17
18// `Gizmo` is a custom modular component.
19class Gizmo : public Component {
20 public:
21 API api() const override;
22
23 virtual bool do_one(std::string arg1) = 0;
24 virtual bool do_one_client_stream(std::vector<std::string> arg1) = 0;
25 virtual std::vector<bool> do_one_server_stream(std::string arg1) = 0;
26 virtual std::vector<bool> do_one_bidi_stream(std::vector<std::string> arg1) = 0;
27 virtual std::string do_two(bool arg1) = 0;
28
29 protected:
30 explicit Gizmo(std::string name);
31};
32
33namespace viam {
34namespace sdk {
35template <>
37 static ::viam::sdk::API api();
38};
39} // namespace sdk
40} // namespace viam
41
42// `GizmoClient` is the gRPC client implementation of a `Gizmo` component.
43class GizmoClient : public Gizmo {
44 public:
45 using interface_type = Gizmo;
46 GizmoClient(std::string name, std::shared_ptr<grpc::Channel> channel);
47
48 bool do_one(std::string arg1) override;
49 bool do_one_client_stream(std::vector<std::string> arg1) override;
50 std::vector<bool> do_one_server_stream(std::string arg1) override;
51 std::vector<bool> do_one_bidi_stream(std::vector<std::string> arg1) override;
52 std::string do_two(bool arg1) override;
53
54 private:
55 using StubType = GizmoService::StubInterface;
56 std::unique_ptr<StubType> stub_;
57 std::shared_ptr<grpc::Channel> channel_;
58};
59
60// `GizmoServer` is the gRPC server implementation of a `Gizmo` component.
61class GizmoServer : public ResourceServer, public GizmoService::Service {
62 public:
63 using interface_type = Gizmo;
64 using service_type = GizmoService;
65 explicit GizmoServer(std::shared_ptr<ResourceManager> manager);
66
67 grpc::Status DoOne(grpc::ServerContext* context,
68 const DoOneRequest* request,
69 DoOneResponse* response) override;
70
71 grpc::Status DoOneClientStream(grpc::ServerContext* context,
72 grpc::ServerReader<DoOneClientStreamRequest>* reader,
73 DoOneClientStreamResponse* response) override;
74
75 grpc::Status DoOneServerStream(grpc::ServerContext* context,
76 const DoOneServerStreamRequest* request,
77 grpc::ServerWriter<DoOneServerStreamResponse>* writer) override;
78
79 grpc::Status DoOneBiDiStream(
80 grpc::ServerContext* context,
81 grpc::ServerReaderWriter<DoOneBiDiStreamResponse, DoOneBiDiStreamRequest>* stream) override;
82
83 grpc::Status DoTwo(grpc::ServerContext* context,
84 const DoTwoRequest* request,
85 DoTwoResponse* response) override;
86};
Definition api.hpp:43
Definition api.hpp:61
Definition api.hpp:19
API api() const override
Returns the API associated with a particular resource.
Definition resource_api.hpp:21
Definition component.hpp:10
Definition resource_server_base.hpp:8
virtual std::string name() const
Return the resource's name.
Defines the resource registry and associated types.
Defines a general-purpose resource manager.
Definition resource_api.hpp:46