Viam C++ SDK current
Loading...
Searching...
No Matches
dial.hpp
1#pragma once
2
3#include <chrono>
4#include <memory>
5#include <string>
6
7#include <boost/optional.hpp>
8
9#include <viam/sdk/common/grpc_fwd.hpp>
10
11namespace viam {
12namespace sdk {
13
14class DialOptions;
16 ViamChannel(std::shared_ptr<GrpcChannel> channel, const char* path, void* runtime);
17
18 public:
19 explicit ViamChannel(std::shared_ptr<GrpcChannel> channel);
20
21 ViamChannel(ViamChannel&&) noexcept;
22
23 ViamChannel& operator=(ViamChannel&&) noexcept;
24
26
33 static ViamChannel dial(const char* uri, const boost::optional<DialOptions>& options);
34
35 // @brief Dials to a robot at the given URI address, using the provided dial options (or default
36 // options is none are provided). Additionally specifies that this dial is an initial connection
37 // attempt and so uses the initial connection options.
42 static ViamChannel dial_initial(const char* uri, const boost::optional<DialOptions>& options);
43
44 const std::shared_ptr<GrpcChannel>& channel() const;
45
46 void close();
47
48 const char* get_channel_addr() const;
49
50 private:
51 const char* uri_;
52 struct impl;
53
54 std::shared_ptr<GrpcChannel> channel_;
55
56 std::unique_ptr<impl> pimpl_;
57};
58
60 public:
62 Credentials(std::string payload);
63 Credentials(std::string type, std::string payload);
64 const std::string& type() const;
65 const std::string& payload() const;
66
67 private:
68 std::string type_;
69 std::string payload_;
70};
71
73 public:
75
76 const boost::optional<Credentials>& credentials() const;
77 const boost::optional<std::string>& entity() const;
78 bool allows_insecure_downgrade() const;
79 const std::chrono::duration<float>& timeout() const;
80 int initial_connection_attempts() const;
81 std::chrono::duration<float> initial_connection_attempt_timeout() const;
82
83 DialOptions& set_entity(boost::optional<std::string> entity);
84 DialOptions& set_credentials(boost::optional<Credentials> creds);
85 DialOptions& set_allow_insecure_downgrade(bool allow);
86 DialOptions& set_timeout(std::chrono::duration<float> timeout);
87 DialOptions& set_initial_connection_attempts(int attempts);
88 DialOptions& set_initial_connection_attempt_timeout(std::chrono::duration<float> timeout);
89
90 private:
91 // TODO (RSDK-917): We currently don't provide a flag for disabling webRTC, instead relying on a
92 // `local` uri. We should update dial logic to consider such a flag.
93
95 boost::optional<std::string> auth_entity_;
96
98 boost::optional<Credentials> credentials_;
99
102 bool allow_insecure_downgrade_ = false;
103
106 std::chrono::duration<float> timeout_{20};
107
110 int initial_connection_attempts_ = 3;
111
114 std::chrono::duration<float> initial_connection_attempt_timeout_{20};
115};
116
117class Options {
118 public:
119 Options(unsigned int refresh_interval, boost::optional<DialOptions> dial_options)
120 : refresh_interval_(std::move(refresh_interval)), dial_options_(std::move(dial_options)) {}
121
122 std::chrono::seconds refresh_interval() const;
123 std::chrono::seconds check_every_interval() const;
124 std::chrono::seconds reconnect_every_interval() const;
125
127 Options& set_check_every_interval(std::chrono::seconds interval);
128
130 Options& set_reconnect_every_interval(std::chrono::seconds interval);
131 const boost::optional<DialOptions>& dial_options() const;
132
133 private:
136 std::chrono::seconds refresh_interval_{0};
137
142 std::chrono::seconds check_every_interval_{0};
143
148 std::chrono::seconds reconnect_every_interval_{0};
149 boost::optional<DialOptions> dial_options_;
150};
151
152} // namespace sdk
153} // namespace viam
Definition dial.hpp:59
Credentials(std::string payload)
Definition dial.hpp:72
Definition dial.hpp:117
Options & set_reconnect_every_interval(std::chrono::seconds interval)
Sets the frequency (in seconds) to attempt to reconnect when connectivity is lost.
Options & set_check_every_interval(std::chrono::seconds interval)
Sets the frequency (in seconds) to verify connectivity.
Definition dial.hpp:15
static ViamChannel dial_initial(const char *uri, const boost::optional< DialOptions > &options)
static ViamChannel dial(const char *uri, const boost::optional< DialOptions > &options)
Connects to a robot at the given URI address, using the provided dial options (or default options is ...