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:
61 Credentials(std::string type, std::string payload);
62 const std::string& type() const;
63 const std::string& payload() const;
64
65 private:
66 std::string type_;
67 std::string payload_;
68};
69
71 public:
73
74 const boost::optional<Credentials>& credentials() const;
75 const boost::optional<std::string>& entity() const;
76 bool allows_insecure_downgrade() const;
77 const std::chrono::duration<float>& timeout() const;
78 int initial_connection_attempts() const;
79 std::chrono::duration<float> initial_connection_attempt_timeout() const;
80
81 DialOptions& set_entity(boost::optional<std::string> entity);
82 DialOptions& set_credentials(boost::optional<Credentials> creds);
83 DialOptions& set_allow_insecure_downgrade(bool allow);
84 DialOptions& set_timeout(std::chrono::duration<float> timeout);
85 DialOptions& set_initial_connection_attempts(int attempts);
86 DialOptions& set_initial_connection_attempt_timeout(std::chrono::duration<float> timeout);
87
88 private:
89 // TODO (RSDK-917): We currently don't provide a flag for disabling webRTC, instead relying on a
90 // `local` uri. We should update dial logic to consider such a flag.
91
93 boost::optional<std::string> auth_entity_;
94
96 boost::optional<Credentials> credentials_;
97
100 bool allow_insecure_downgrade_ = false;
101
104 std::chrono::duration<float> timeout_{20};
105
108 int initial_connection_attempts_ = 3;
109
112 std::chrono::duration<float> initial_connection_attempt_timeout_{20};
113};
114
115class Options {
116 public:
117 Options(unsigned int refresh_interval, boost::optional<DialOptions> dial_options)
118 : refresh_interval_(std::move(refresh_interval)), dial_options_(std::move(dial_options)) {}
119
120 std::chrono::seconds refresh_interval() const;
121 std::chrono::seconds check_every_interval() const;
122 std::chrono::seconds reconnect_every_interval() const;
123
125 Options& set_check_every_interval(std::chrono::seconds interval);
126
128 Options& set_reconnect_every_interval(std::chrono::seconds interval);
129 const boost::optional<DialOptions>& dial_options() const;
130
131 private:
134 std::chrono::seconds refresh_interval_{0};
135
140 std::chrono::seconds check_every_interval_{0};
141
146 std::chrono::seconds reconnect_every_interval_{0};
147 boost::optional<DialOptions> dial_options_;
148};
149
150} // namespace sdk
151} // namespace viam
Definition dial.hpp:59
Definition dial.hpp:70
Definition dial.hpp:115
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 ...