uatools 1.0.0
 
Loading...
Searching...
No Matches
icomm_adapter_generic_v1.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <algorithm>
4#include <atomic>
5#include <chrono>
6#include <cstdint>
7#include <functional>
8#include <memory>
9#include <optional>
10#include <string>
11#include <utility>
12#include <variant>
13#include <vector>
14
15// =============================================================================
16// Protocol-agnostic communication adapter interface (contract version 3)
17//
18// Scope: the value-oriented CONTROL plane (read/write/invoke/browse/subscribe)
19// over arbitrary protocols (OPC UA, RTMS, Modbus, REST, MQTT, ...). Bulk media
20// streaming (e.g. GenICam image acquisition) is intentionally OUT OF SCOPE and
21// belongs to a peer interface composed alongside this one, not derived from it.
22//
23// Design rules:
24// 1. A field lives in a core type only if EVERY conceivable adapter can honor
25// it meaningfully. Protocol-specifics go in `properties` / optional fields.
26// 2. The interface grows by ADDITION. After the first adapter ships, new
27// methods MUST carry default implementations (return Unsupported), never
28// pure-virtual, so existing implementers keep compiling. Pre-first-adapter
29// breaking changes are free and acceptable (hence the version bumps).
30//
31// THREAD-SAFETY CONTRACT (binding):
32// - const query methods (Is*, Get*) are callable from any thread at any time.
33// - Read/Write/Invoke/Browse/Discover may be called concurrently with each
34// other and with active subscriptions; implementations serialize as needed.
35// - Configure/Connect/Disconnect must NOT run concurrently with each other or
36// with data operations; the caller owns lifecycle ordering.
37// - Handlers (subscription + connection-state) run on the adapter's internal
38// thread(s); see each handler's contract below.
39// =============================================================================
40
41namespace eso::comm {
42
43// Bumped to 3: builds on v2 with RAII handler registration, item-level
44// unsubscribe, and a flat (but map-semantic) PropertyMap. Pre-implementation,
45// so the break is costless.
46inline constexpr std::uint32_t kContractVersion = 3;
47
48using Address = std::string;
49using RequestId = std::string;
50using SubscriptionId = std::string;
51
52// -----------------------------------------------------------------------------
53// PropertyMap: contiguous storage (avoids per-node heap allocs / fragmentation
54// for the typical <10-entry case) WHILE preserving map semantics: unique keys
55// and a lookup API. This keeps the performance win without silently allowing
56// duplicate keys the way a raw vector<pair> would.
57// -----------------------------------------------------------------------------
59public:
60 using value_type = std::pair<std::string, std::string>;
61 using storage = std::vector<value_type>;
62 using iterator = storage::iterator;
63 using const_iterator = storage::const_iterator;
64
65 PropertyMap() = default;
66 PropertyMap(std::initializer_list<value_type> init) {
67 for (const auto& kv : init) set(kv.first, kv.second);
68 }
69
70 // Insert or overwrite. Guarantees key uniqueness.
71 void set(std::string key, std::string val) {
72 auto it = find(key);
73 if (it != items_.end()) it->second = std::move(val);
74 else items_.emplace_back(std::move(key), std::move(val));
75 }
76
77 const std::string* get(std::string_view key) const {
78 auto it = find(key);
79 return it == items_.end() ? nullptr : &it->second;
80 }
81
82 std::string get_or(std::string_view key, std::string_view fallback) const {
83 auto* v = get(key);
84 return v ? *v : std::string(fallback);
85 }
86
87 bool contains(std::string_view key) const { return find(key) != items_.end(); }
88
89 bool erase(std::string_view key) {
90 auto it = find(key);
91 if (it == items_.end()) return false;
92 items_.erase(it);
93 return true;
94 }
95
96 bool empty() const { return items_.empty(); }
97 std::size_t size() const { return items_.size(); }
98 void reserve(std::size_t n) { items_.reserve(n); }
99
100 iterator begin() { return items_.begin(); }
101 iterator end() { return items_.end(); }
102 const_iterator begin() const { return items_.begin(); }
103 const_iterator end() const { return items_.end(); }
104
105private:
106 const_iterator find(std::string_view key) const {
107 return std::find_if(items_.begin(), items_.end(),
108 [&](const value_type& kv) { return kv.first == key; });
109 }
110 iterator find(std::string_view key) {
111 return std::find_if(items_.begin(), items_.end(),
112 [&](const value_type& kv) { return kv.first == key; });
113 }
114 storage items_;
115};
116
117// -----------------------------------------------------------------------------
118// RAII handle: ties registration lifetime to scope, eliminating the
119// handler-outlives-target teardown trap. Move-only; Reset() detaches early.
120// -----------------------------------------------------------------------------
121class [[nodiscard]] RegistrationToken {
122public:
123 using UnregisterCallback = std::function<void()>;
124
125 RegistrationToken() = default;
127 : on_destruct_(std::move(on_destruct)) {}
128 ~RegistrationToken() { if (on_destruct_) on_destruct_(); }
129
133 RegistrationToken& operator=(RegistrationToken&&) noexcept = default;
134
135 void Reset() { on_destruct_ = nullptr; }
136
137private:
138 UnregisterCallback on_destruct_;
139};
140
141// -----------------------------------------------------------------------------
142// Cooperative cancellation — the seam off which async + abort hang. Sync
143// adapters that cannot interrupt a blocking call MAY ignore it but must say so.
144// -----------------------------------------------------------------------------
146public:
147 CancellationToken() = default;
148 explicit CancellationToken(std::shared_ptr<std::atomic_bool> flag)
149 : flag_(std::move(flag)) {}
150 bool cancelled() const {
151 return flag_ && flag_->load(std::memory_order_acquire);
152 }
153private:
154 std::shared_ptr<std::atomic_bool> flag_;
155};
156
158public:
159 CancellationSource() : flag_(std::make_shared<std::atomic_bool>(false)) {}
160 CancellationToken token() const { return CancellationToken(flag_); }
161 void cancel() { flag_->store(true, std::memory_order_release); }
162 bool cancelled() const { return flag_->load(std::memory_order_acquire); }
163private:
164 std::shared_ptr<std::atomic_bool> flag_;
165};
166
183
184// -----------------------------------------------------------------------------
185// Value: universal payload.
186// - monostate = empty / no-value (write-only nodes, failed reads, defaults).
187// - vector<uint8_t> = raw byte blob / register block.
188// - vector<bool> = boolean ARRAY (distinct from a blob). Kept despite the
189// proxy-reference quirk so a Boolean[] from e.g. OPC UA has an honest type
190// rather than being conflated with a byte blob. Treat with the usual
191// vector<bool> care (no element addresses); convert at the adapter edge.
192// -----------------------------------------------------------------------------
193using Value = std::variant<
194 std::monostate,
195 bool,
196 std::int32_t,
197 std::uint32_t,
198 std::int64_t,
199 std::uint64_t,
200 float,
201 double,
202 std::string,
203 std::vector<std::uint8_t>,
204 std::vector<bool>,
205 std::vector<std::int32_t>,
206 std::vector<std::uint32_t>,
207 std::vector<std::int64_t>,
208 std::vector<std::uint64_t>,
209 std::vector<float>,
210 std::vector<double>,
211 std::vector<std::string>,
213
214struct Result {
215 // Transport/batch-level status. Per-item structs carry their own status,
216 // independent of this, so a batch can succeed overall with some items failed.
218 std::string message;
219 explicit operator bool() const { return status == Status::Ok; }
220};
221
223 std::chrono::milliseconds timeout{5000};
224 std::optional<RequestId> requestId;
225 std::optional<CancellationToken> cancellation;
226 PropertyMap properties; // protocol-specific request knobs
227};
228
229struct DataValue {
232 std::string message;
233 // Single universal timestamp; protocols with extra clocks (e.g. UA
234 // serverTimestamp) record them in properties under documented keys.
235 std::optional<std::chrono::system_clock::time_point> timestamp;
237};
238
240 std::string endpoint;
241 PropertyMap properties; // auth/security/tuning — any scheme fits here
242};
243
251
253 std::string endpoint;
254 std::string protocol;
255 std::string adapterName;
256 std::string adapterVersion;
259};
260
265
266// Fired on the adapter's internal thread when the link transitions.
267// RESUBSCRIPTION CONTRACT: unless an adapter documents otherwise, subscriptions
268// DO NOT survive a Faulted transition; on recovery the caller must resubscribe.
269// Handler must be non-blocking and must not call Configure/Connect/Disconnect.
276using ConnectionStateHandler = std::function<void(const ConnectionStateChange&)>;
277
278// -----------------------------------------------------------------------------
279// Discover: find connectable endpoints (pre-connection). All protocol-specific
280// request knobs go through options.properties — there is no second bag.
281// -----------------------------------------------------------------------------
283 std::optional<std::string> query;
285};
287 std::string endpoint;
288 std::string protocol;
289 std::string name;
291};
293 std::vector<DiscoveredEndpoint> endpoints;
294};
295
296// -----------------------------------------------------------------------------
297// Browse: inspect the address space of a CONNECTED endpoint. cursor/hasMore
298// page large address spaces: pass the returned cursor back to continue.
299// -----------------------------------------------------------------------------
301 std::optional<Address> root;
302 bool recursive = false;
303 std::optional<std::string> cursor;
305};
308 std::string name;
309 std::optional<Address> parent;
310 bool hasChildren = false;
311 PropertyMap properties; // "access", "type", "displayName", ...
312};
314 std::vector<NodeDescriptor> nodes;
315 std::optional<std::string> cursor;
316 bool hasMore = false;
317};
318
319// -----------------------------------------------------------------------------
320// Read
321// -----------------------------------------------------------------------------
327 std::vector<ReadItem> items;
329};
330struct ReadItemResult : Result { // item status, independent of batch status
332 std::optional<DataValue> data;
333};
335 std::vector<ReadItemResult> items;
336};
337
338// -----------------------------------------------------------------------------
339// Write — batch items are INDEPENDENT and NON-ATOMIC unless documented;
340// inspect per-item results.
341// -----------------------------------------------------------------------------
348 std::vector<WriteItem> items;
350};
351struct WriteItemResult : Result { // item status, independent of batch status
353};
355 std::vector<WriteItemResult> items;
356};
357
358// -----------------------------------------------------------------------------
359// Invoke (method / command / RPC) — optional capability.
360// -----------------------------------------------------------------------------
362 std::string name; // may be empty for positional protocols
364};
367 std::vector<InvokeArgument> inputArguments;
369};
371 std::string name;
373};
375 std::vector<InvokeArgumentResult> outputArguments;
376};
377
378// -----------------------------------------------------------------------------
379// Subscribe.
380// SUBSCRIPTION HANDLER THREADING CONTRACT (binding):
381// - Invoked on the adapter's internal delivery thread(s), not the caller's.
382// - Must be non-blocking and must not throw.
383// - Unsubscribe(thisId) / UnsubscribeItems from within the handler is SAFE;
384// honored after the current invocation returns; no re-entry afterwards.
385// - Connect/Disconnect/Configure from within the handler is NOT safe.
386// - After Unsubscribe / UnsubscribeItems / UnsubscribeAll / Disconnect
387// returns, no further invocations for the affected items occur and any
388// in-flight invocation has completed (these calls block until drained).
389// - Backpressure default: drop oldest; adapters may offer alternatives via
390// request properties.
391// -----------------------------------------------------------------------------
397 std::vector<SubscribeItem> items;
398 std::optional<std::chrono::milliseconds> rateHint; // best-effort
400};
406using SubscriptionHandler = std::function<void(const Notification&)>;
412 std::vector<SubscribeItemResult> items;
413};
417
418// -----------------------------------------------------------------------------
419// Capabilities — runtime feature negotiation.
420// -----------------------------------------------------------------------------
422 bool discover = false;
423 bool browse = false;
424 bool read = false;
425 bool write = false;
426 bool invoke = false;
427 bool subscribe = false;
428 bool batch = false;
429 bool async = false;
430 bool cancellation = false;
433};
434
436 std::string adapterName;
437 std::string adapterVersion;
438 std::string protocol;
440
441 std::uint64_t discoverCount = 0;
442 std::uint64_t browseCount = 0;
443 std::uint64_t readCount = 0;
444 std::uint64_t writeCount = 0;
445 std::uint64_t invokeCount = 0;
446 std::uint64_t notificationCount = 0;
447 std::uint64_t errorCount = 0;
448
449 std::string lastError;
451};
452
453// Callbacks take the result BY VALUE so consumers can std::move out of it
454// across thread boundaries without a deep copy. Delivered on the adapter's
455// internal thread (same discipline as subscription handlers).
456using DiscoverCallback = std::function<void(DiscoverResult result)>;
457using BrowseCallback = std::function<void(BrowseResult result)>;
458using ReadCallback = std::function<void(ReadResult result)>;
459using WriteCallback = std::function<void(WriteResult result)>;
460using InvokeCallback = std::function<void(InvokeResult result)>;
461
462// =============================================================================
463// Core interface.
464//
465// LIFECYCLE CONTRACT:
466// - Configure only while Disconnected (else InvalidState).
467// - Connect requires a prior successful Configure (else InvalidState).
468// - Connect/Disconnect are idempotent w.r.t. target state and block until it
469// is reached or failure is determined.
470// - Data ops require Connected (else NotConnected).
471// - Unimplemented optional ops return Status::Unsupported; consult
472// GetCapabilities() to avoid relying on them.
473// =============================================================================
475public:
476 virtual ~ICommAdapter() = default;
477
478 virtual std::uint32_t GetContractVersion() const { return kContractVersion; }
479
480 virtual Capabilities GetCapabilities() const = 0;
482
483 // --- Lifecycle ---
484 virtual Result Configure(const ConnectionOptions& options) = 0;
485 virtual Result Connect() = 0;
486 virtual Result Disconnect() = 0;
488 virtual bool IsConnected() const = 0;
489
490 // RAII registration: unregistration is guaranteed when the returned token
491 // leaves scope (or via Reset()). Pass nullptr semantics by simply dropping
492 // the token. See ConnectionStateHandler contract.
494
495 // --- Synchronous operations ---
496 virtual DiscoverResult Discover(const DiscoverRequest& request) = 0;
497 virtual BrowseResult Browse(const BrowseRequest& request) = 0;
498 virtual ReadResult Read(const ReadRequest& request) = 0;
499 virtual WriteResult Write(const WriteRequest& request) = 0;
500 virtual InvokeResult Invoke(const InvokeRequest& request) = 0;
501
502 // --- Asynchronous operations (callback on internal thread; cancel via the
503 // token in request.options.cancellation) ---
504 virtual void DiscoverAsync(const DiscoverRequest& request, DiscoverCallback cb) = 0;
505 virtual void BrowseAsync(const BrowseRequest& request, BrowseCallback cb) = 0;
506 virtual void ReadAsync(const ReadRequest& request, ReadCallback cb) = 0;
507 virtual void WriteAsync(const WriteRequest& request, WriteCallback cb) = 0;
508 virtual void InvokeAsync(const InvokeRequest& request, InvokeCallback cb) = 0;
509
510 // --- Pub/Sub ---
512 SubscriptionHandler handler) = 0;
514 // Scale a subscription back without destroying the whole batch.
516 const std::vector<Address>& addresses) = 0;
517 virtual Result UnsubscribeAll() = 0;
518};
519
520} // namespace eso::comm
CancellationSource()
Definition icomm_adapter_generic_v1.hpp:159
void cancel()
Definition icomm_adapter_generic_v1.hpp:161
bool cancelled() const
Definition icomm_adapter_generic_v1.hpp:162
CancellationToken token() const
Definition icomm_adapter_generic_v1.hpp:160
Definition icomm_adapter_generic_v1.hpp:145
CancellationToken(std::shared_ptr< std::atomic_bool > flag)
Definition icomm_adapter_generic_v1.hpp:148
bool cancelled() const
Definition icomm_adapter_generic_v1.hpp:150
Definition icomm_adapter_generic_v1.hpp:474
virtual ConnectionStatus GetConnectionStatus() const =0
virtual ~ICommAdapter()=default
virtual void BrowseAsync(const BrowseRequest &request, BrowseCallback cb)=0
virtual Capabilities GetCapabilities() const =0
virtual UnsubscribeResult Unsubscribe(const SubscriptionId &id)=0
virtual SubscribeResult Subscribe(const SubscribeRequest &request, SubscriptionHandler handler)=0
virtual void WriteAsync(const WriteRequest &request, WriteCallback cb)=0
virtual RegistrationToken SetConnectionStateHandler(ConnectionStateHandler handler)=0
virtual void DiscoverAsync(const DiscoverRequest &request, DiscoverCallback cb)=0
virtual UnsubscribeResult UnsubscribeItems(const SubscriptionId &id, const std::vector< Address > &addresses)=0
virtual Result Configure(const ConnectionOptions &options)=0
virtual BrowseResult Browse(const BrowseRequest &request)=0
virtual DiscoverResult Discover(const DiscoverRequest &request)=0
virtual Result Connect()=0
virtual Result UnsubscribeAll()=0
virtual WriteResult Write(const WriteRequest &request)=0
virtual Result Disconnect()=0
virtual ReadResult Read(const ReadRequest &request)=0
virtual void ReadAsync(const ReadRequest &request, ReadCallback cb)=0
virtual InvokeResult Invoke(const InvokeRequest &request)=0
virtual AdapterDiagnostics GetDiagnostics() const =0
virtual std::uint32_t GetContractVersion() const
Definition icomm_adapter_generic_v1.hpp:478
virtual bool IsConnected() const =0
virtual void InvokeAsync(const InvokeRequest &request, InvokeCallback cb)=0
Definition icomm_adapter_generic_v1.hpp:58
bool empty() const
Definition icomm_adapter_generic_v1.hpp:96
std::size_t size() const
Definition icomm_adapter_generic_v1.hpp:97
const_iterator begin() const
Definition icomm_adapter_generic_v1.hpp:102
bool contains(std::string_view key) const
Definition icomm_adapter_generic_v1.hpp:87
std::string get_or(std::string_view key, std::string_view fallback) const
Definition icomm_adapter_generic_v1.hpp:82
iterator begin()
Definition icomm_adapter_generic_v1.hpp:100
std::pair< std::string, std::string > value_type
Definition icomm_adapter_generic_v1.hpp:60
PropertyMap(std::initializer_list< value_type > init)
Definition icomm_adapter_generic_v1.hpp:66
std::vector< value_type > storage
Definition icomm_adapter_generic_v1.hpp:61
iterator end()
Definition icomm_adapter_generic_v1.hpp:101
const_iterator end() const
Definition icomm_adapter_generic_v1.hpp:103
void reserve(std::size_t n)
Definition icomm_adapter_generic_v1.hpp:98
const std::string * get(std::string_view key) const
Definition icomm_adapter_generic_v1.hpp:77
storage::iterator iterator
Definition icomm_adapter_generic_v1.hpp:62
storage::const_iterator const_iterator
Definition icomm_adapter_generic_v1.hpp:63
bool erase(std::string_view key)
Definition icomm_adapter_generic_v1.hpp:89
void set(std::string key, std::string val)
Definition icomm_adapter_generic_v1.hpp:71
Definition icomm_adapter_generic_v1.hpp:121
std::function< void()> UnregisterCallback
Definition icomm_adapter_generic_v1.hpp:123
RegistrationToken(UnregisterCallback on_destruct)
Definition icomm_adapter_generic_v1.hpp:126
~RegistrationToken()
Definition icomm_adapter_generic_v1.hpp:128
RegistrationToken & operator=(const RegistrationToken &)=delete
void Reset()
Definition icomm_adapter_generic_v1.hpp:135
RegistrationToken(RegistrationToken &&) noexcept=default
RegistrationToken(const RegistrationToken &)=delete
Definition icomm_adapter_generic_v1.hpp:41
std::function< void(const Notification &)> SubscriptionHandler
Definition icomm_adapter_generic_v1.hpp:406
std::function< void(ReadResult result)> ReadCallback
Definition icomm_adapter_generic_v1.hpp:458
Status
Definition icomm_adapter_generic_v1.hpp:167
@ AlreadyConnected
Definition icomm_adapter_generic_v1.hpp:171
@ TypeMismatch
Definition icomm_adapter_generic_v1.hpp:176
@ NotFound
Definition icomm_adapter_generic_v1.hpp:174
@ NotConnected
Definition icomm_adapter_generic_v1.hpp:170
@ InternalError
Definition icomm_adapter_generic_v1.hpp:181
@ BadRequest
Definition icomm_adapter_generic_v1.hpp:173
@ Cancelled
Definition icomm_adapter_generic_v1.hpp:178
@ Ok
Definition icomm_adapter_generic_v1.hpp:168
@ TransportError
Definition icomm_adapter_generic_v1.hpp:180
@ Unsupported
Definition icomm_adapter_generic_v1.hpp:177
@ Timeout
Definition icomm_adapter_generic_v1.hpp:169
@ AccessDenied
Definition icomm_adapter_generic_v1.hpp:175
@ RemoteError
Definition icomm_adapter_generic_v1.hpp:179
@ InvalidState
Definition icomm_adapter_generic_v1.hpp:172
std::string SubscriptionId
Definition icomm_adapter_generic_v1.hpp:50
std::variant< std::monostate, bool, std::int32_t, std::uint32_t, std::int64_t, std::uint64_t, float, double, std::string, std::vector< std::uint8_t >, std::vector< bool >, std::vector< std::int32_t >, std::vector< std::uint32_t >, std::vector< std::int64_t >, std::vector< std::uint64_t >, std::vector< float >, std::vector< double >, std::vector< std::string >, PropertyMap > Value
Definition icomm_adapter_generic_v1.hpp:193
std::function< void(DiscoverResult result)> DiscoverCallback
Definition icomm_adapter_generic_v1.hpp:456
constexpr std::uint32_t kContractVersion
Definition icomm_adapter_generic_v1.hpp:46
std::function< void(InvokeResult result)> InvokeCallback
Definition icomm_adapter_generic_v1.hpp:460
std::string Address
Definition icomm_adapter_generic_v1.hpp:48
std::string RequestId
Definition icomm_adapter_generic_v1.hpp:49
std::function< void(WriteResult result)> WriteCallback
Definition icomm_adapter_generic_v1.hpp:459
std::function< void(const ConnectionStateChange &)> ConnectionStateHandler
Definition icomm_adapter_generic_v1.hpp:276
ConnectionState
Definition icomm_adapter_generic_v1.hpp:244
@ Disconnecting
Definition icomm_adapter_generic_v1.hpp:248
@ Faulted
Definition icomm_adapter_generic_v1.hpp:249
@ Connected
Definition icomm_adapter_generic_v1.hpp:247
@ Connecting
Definition icomm_adapter_generic_v1.hpp:246
@ Disconnected
Definition icomm_adapter_generic_v1.hpp:245
std::function< void(BrowseResult result)> BrowseCallback
Definition icomm_adapter_generic_v1.hpp:457
Definition errors.hpp:12
Definition icomm_adapter_generic_v1.hpp:435
std::uint64_t browseCount
Definition icomm_adapter_generic_v1.hpp:442
std::uint64_t notificationCount
Definition icomm_adapter_generic_v1.hpp:446
std::string adapterVersion
Definition icomm_adapter_generic_v1.hpp:437
std::string lastError
Definition icomm_adapter_generic_v1.hpp:449
PropertyMap properties
Definition icomm_adapter_generic_v1.hpp:450
std::string adapterName
Definition icomm_adapter_generic_v1.hpp:436
std::uint64_t errorCount
Definition icomm_adapter_generic_v1.hpp:447
std::uint64_t readCount
Definition icomm_adapter_generic_v1.hpp:443
std::uint64_t invokeCount
Definition icomm_adapter_generic_v1.hpp:445
std::uint64_t discoverCount
Definition icomm_adapter_generic_v1.hpp:441
ConnectionState connectionState
Definition icomm_adapter_generic_v1.hpp:439
std::uint64_t writeCount
Definition icomm_adapter_generic_v1.hpp:444
Definition icomm_adapter_generic_v1.hpp:300
std::optional< std::string > cursor
Definition icomm_adapter_generic_v1.hpp:303
RequestOptions options
Definition icomm_adapter_generic_v1.hpp:304
std::optional< Address > root
Definition icomm_adapter_generic_v1.hpp:301
bool recursive
Definition icomm_adapter_generic_v1.hpp:302
Definition icomm_adapter_generic_v1.hpp:313
std::optional< std::string > cursor
Definition icomm_adapter_generic_v1.hpp:315
bool hasMore
Definition icomm_adapter_generic_v1.hpp:316
std::vector< NodeDescriptor > nodes
Definition icomm_adapter_generic_v1.hpp:314
Definition icomm_adapter_generic_v1.hpp:421
bool connectionStateEvents
Definition icomm_adapter_generic_v1.hpp:431
bool batch
Definition icomm_adapter_generic_v1.hpp:428
bool subscribe
Definition icomm_adapter_generic_v1.hpp:427
bool cancellation
Definition icomm_adapter_generic_v1.hpp:430
bool browse
Definition icomm_adapter_generic_v1.hpp:423
bool invoke
Definition icomm_adapter_generic_v1.hpp:426
bool async
Definition icomm_adapter_generic_v1.hpp:429
PropertyMap properties
Definition icomm_adapter_generic_v1.hpp:432
bool discover
Definition icomm_adapter_generic_v1.hpp:422
bool write
Definition icomm_adapter_generic_v1.hpp:425
bool read
Definition icomm_adapter_generic_v1.hpp:424
Definition icomm_adapter_generic_v1.hpp:252
std::string endpoint
Definition icomm_adapter_generic_v1.hpp:253
std::string adapterVersion
Definition icomm_adapter_generic_v1.hpp:256
PropertyMap properties
Definition icomm_adapter_generic_v1.hpp:258
std::uint32_t contractVersion
Definition icomm_adapter_generic_v1.hpp:257
std::string adapterName
Definition icomm_adapter_generic_v1.hpp:255
Definition icomm_adapter_generic_v1.hpp:239
PropertyMap properties
Definition icomm_adapter_generic_v1.hpp:241
std::string endpoint
Definition icomm_adapter_generic_v1.hpp:240
Definition icomm_adapter_generic_v1.hpp:270
Status reason
Definition icomm_adapter_generic_v1.hpp:273
ConnectionState previous
Definition icomm_adapter_generic_v1.hpp:271
ConnectionState current
Definition icomm_adapter_generic_v1.hpp:272
std::string message
Definition icomm_adapter_generic_v1.hpp:274
Definition icomm_adapter_generic_v1.hpp:261
std::optional< ConnectionInfo > info
Definition icomm_adapter_generic_v1.hpp:263
ConnectionState state
Definition icomm_adapter_generic_v1.hpp:262
Definition icomm_adapter_generic_v1.hpp:229
Status status
Definition icomm_adapter_generic_v1.hpp:231
std::string message
Definition icomm_adapter_generic_v1.hpp:232
std::optional< std::chrono::system_clock::time_point > timestamp
Definition icomm_adapter_generic_v1.hpp:235
Value value
Definition icomm_adapter_generic_v1.hpp:230
PropertyMap properties
Definition icomm_adapter_generic_v1.hpp:236
Definition icomm_adapter_generic_v1.hpp:282
std::optional< std::string > query
Definition icomm_adapter_generic_v1.hpp:283
RequestOptions options
Definition icomm_adapter_generic_v1.hpp:284
Definition icomm_adapter_generic_v1.hpp:292
std::vector< DiscoveredEndpoint > endpoints
Definition icomm_adapter_generic_v1.hpp:293
Definition icomm_adapter_generic_v1.hpp:286
PropertyMap properties
Definition icomm_adapter_generic_v1.hpp:290
std::string endpoint
Definition icomm_adapter_generic_v1.hpp:287
std::string name
Definition icomm_adapter_generic_v1.hpp:289
Definition icomm_adapter_generic_v1.hpp:370
DataValue data
Definition icomm_adapter_generic_v1.hpp:372
std::string name
Definition icomm_adapter_generic_v1.hpp:371
Definition icomm_adapter_generic_v1.hpp:361
Value value
Definition icomm_adapter_generic_v1.hpp:363
std::string name
Definition icomm_adapter_generic_v1.hpp:362
Definition icomm_adapter_generic_v1.hpp:365
std::vector< InvokeArgument > inputArguments
Definition icomm_adapter_generic_v1.hpp:367
RequestOptions options
Definition icomm_adapter_generic_v1.hpp:368
Address method
Definition icomm_adapter_generic_v1.hpp:366
Definition icomm_adapter_generic_v1.hpp:374
std::vector< InvokeArgumentResult > outputArguments
Definition icomm_adapter_generic_v1.hpp:375
Definition icomm_adapter_generic_v1.hpp:306
std::optional< Address > parent
Definition icomm_adapter_generic_v1.hpp:309
std::string name
Definition icomm_adapter_generic_v1.hpp:308
Address address
Definition icomm_adapter_generic_v1.hpp:307
PropertyMap properties
Definition icomm_adapter_generic_v1.hpp:311
bool hasChildren
Definition icomm_adapter_generic_v1.hpp:310
Definition icomm_adapter_generic_v1.hpp:401
DataValue data
Definition icomm_adapter_generic_v1.hpp:404
Address address
Definition icomm_adapter_generic_v1.hpp:403
SubscriptionId subscriptionId
Definition icomm_adapter_generic_v1.hpp:402
Definition icomm_adapter_generic_v1.hpp:330
Address address
Definition icomm_adapter_generic_v1.hpp:331
std::optional< DataValue > data
Definition icomm_adapter_generic_v1.hpp:332
Definition icomm_adapter_generic_v1.hpp:322
PropertyMap properties
Definition icomm_adapter_generic_v1.hpp:324
Address address
Definition icomm_adapter_generic_v1.hpp:323
Definition icomm_adapter_generic_v1.hpp:326
RequestOptions options
Definition icomm_adapter_generic_v1.hpp:328
std::vector< ReadItem > items
Definition icomm_adapter_generic_v1.hpp:327
Definition icomm_adapter_generic_v1.hpp:334
std::vector< ReadItemResult > items
Definition icomm_adapter_generic_v1.hpp:335
Definition icomm_adapter_generic_v1.hpp:222
PropertyMap properties
Definition icomm_adapter_generic_v1.hpp:226
std::chrono::milliseconds timeout
Definition icomm_adapter_generic_v1.hpp:223
std::optional< CancellationToken > cancellation
Definition icomm_adapter_generic_v1.hpp:225
std::optional< RequestId > requestId
Definition icomm_adapter_generic_v1.hpp:224
Definition icomm_adapter_generic_v1.hpp:214
std::string message
Definition icomm_adapter_generic_v1.hpp:218
Status status
Definition icomm_adapter_generic_v1.hpp:217
Definition icomm_adapter_generic_v1.hpp:407
Address address
Definition icomm_adapter_generic_v1.hpp:408
Definition icomm_adapter_generic_v1.hpp:392
PropertyMap properties
Definition icomm_adapter_generic_v1.hpp:394
Address address
Definition icomm_adapter_generic_v1.hpp:393
Definition icomm_adapter_generic_v1.hpp:396
RequestOptions options
Definition icomm_adapter_generic_v1.hpp:399
std::vector< SubscribeItem > items
Definition icomm_adapter_generic_v1.hpp:397
std::optional< std::chrono::milliseconds > rateHint
Definition icomm_adapter_generic_v1.hpp:398
Definition icomm_adapter_generic_v1.hpp:410
std::vector< SubscribeItemResult > items
Definition icomm_adapter_generic_v1.hpp:412
SubscriptionId id
Definition icomm_adapter_generic_v1.hpp:411
Definition icomm_adapter_generic_v1.hpp:414
SubscriptionId id
Definition icomm_adapter_generic_v1.hpp:415
Definition icomm_adapter_generic_v1.hpp:351
Address address
Definition icomm_adapter_generic_v1.hpp:352
Definition icomm_adapter_generic_v1.hpp:342
PropertyMap properties
Definition icomm_adapter_generic_v1.hpp:345
Address address
Definition icomm_adapter_generic_v1.hpp:343
Value value
Definition icomm_adapter_generic_v1.hpp:344
Definition icomm_adapter_generic_v1.hpp:347
std::vector< WriteItem > items
Definition icomm_adapter_generic_v1.hpp:348
RequestOptions options
Definition icomm_adapter_generic_v1.hpp:349
Definition icomm_adapter_generic_v1.hpp:354
std::vector< WriteItemResult > items
Definition icomm_adapter_generic_v1.hpp:355