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 explicit Gizmo(const ResourceConfig& cfg);
33};
34
35namespace viam {
36namespace sdk {
37template <>
39 static ::viam::sdk::API api();
40};
41} // namespace sdk
42} // namespace viam
43
44// `GizmoClient` is the gRPC client implementation of a `Gizmo` component.
45class GizmoClient : public Gizmo {
46 public:
47 using interface_type = Gizmo;
48 GizmoClient(std::string name, const ViamChannel& channel);
49
50 const ViamChannel& channel() const {
51 return *channel_;
52 }
53
54 bool do_one(std::string arg1) override;
55 bool do_one_client_stream(std::vector<std::string> arg1) override;
56 std::vector<bool> do_one_server_stream(std::string arg1) override;
57 std::vector<bool> do_one_bidi_stream(std::vector<std::string> arg1) override;
58 std::string do_two(bool arg1) override;
59
60 private:
61 using StubType = GizmoService::StubInterface;
62 std::unique_ptr<StubType> stub_;
63 const ViamChannel* channel_;
64};
65
66// `GizmoServer` is the gRPC server implementation of a `Gizmo` component.
67class GizmoServer : public ResourceServer, public GizmoService::Service {
68 public:
69 using interface_type = Gizmo;
70 using service_type = GizmoService;
71 explicit GizmoServer(std::shared_ptr<ResourceManager> manager);
72
73 grpc::Status DoOne(grpc::ServerContext* context,
74 const DoOneRequest* request,
75 DoOneResponse* response) override;
76
77 grpc::Status DoOneClientStream(grpc::ServerContext* context,
78 grpc::ServerReader<DoOneClientStreamRequest>* reader,
79 DoOneClientStreamResponse* response) override;
80
81 grpc::Status DoOneServerStream(grpc::ServerContext* context,
82 const DoOneServerStreamRequest* request,
83 grpc::ServerWriter<DoOneServerStreamResponse>* writer) override;
84
85 grpc::Status DoOneBiDiStream(
86 grpc::ServerContext* context,
87 grpc::ServerReaderWriter<DoOneBiDiStreamResponse, DoOneBiDiStreamRequest>* stream) override;
88
89 grpc::Status DoTwo(grpc::ServerContext* context,
90 const DoTwoRequest* request,
91 DoTwoResponse* response) override;
92};
Definition api.hpp:45
Definition api.hpp:67
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.hpp:43
Definition resource_server_base.hpp:8
virtual std::string name() const
Return the resource's name.
Definition dial.hpp:25
Defines the resource registry and associated types.
Defines a general-purpose resource manager.
Definition resource_api.hpp:46