PdCom  5.3
Process data communication client
Loading...
Searching...
No Matches
Subscription.h
Go to the documentation of this file.
1/*****************************************************************************
2 * vim:tw=78
3 *
4 * Copyright (C) 2021 Richard Hacker (lerichi at gmx dot net),
5 * Florian Pose (fp at igh dot de),
6 * Bjarne von Horn (vh at igh dot de).
7 *
8 * This file is part of the PdCom library.
9 *
10 * The PdCom library is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU Lesser General Public License as published by
12 * the Free Software Foundation, either version 3 of the License, or (at your
13 * option) any later version.
14 *
15 * The PdCom library is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
18 * License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public License
21 * along with the PdCom library. If not, see <http://www.gnu.org/licenses/>.
22 *
23 ****************************************************************************/
24
26
27#ifndef PDCOM5_SUBSCRIPTION_H
28#define PDCOM5_SUBSCRIPTION_H
29
30#include "DataDeserializer.h"
31#include "Exception.h"
32#include "Selector.h"
33#include "Variable.h"
34#include "details.h"
35
36#include <memory>
37#include <pdcom5_export.h>
38#include <string>
39#include <vector>
40
41namespace PdCom {
42
43namespace impl {
44class Subscription;
45} // namespace impl
46
47class Process;
48class Variable;
49class Subscriber;
50
64class PDCOM5_PUBLIC Subscription : public DataDeserializer<Subscription>
65{
66 public:
67 enum class State {
68 Invalid = 0,
69 Pending,
70 Active,
71 };
72
74 Subscription() = default;
75 Subscription(Subscription &&) noexcept;
76 Subscription &operator=(Subscription &&) noexcept;
77
86 Subscriber &subscriber,
87 const Variable &variable,
88 const Selector &selector = {});
89
99 Subscriber &subscriber,
100 Process &process,
101 const std::string &path,
102 const Selector &selector = {});
103
108 void poll();
109
116 const void *getData() const;
117
124
130 void print(std::ostream &os, char delimiter) const;
131
135 bool empty() const noexcept { return !(pimpl); }
136
140 State getState() const noexcept { return state_; }
141
146
152 std::string getPath() const;
153
154 private:
155 friend impl::Subscription;
156
157 std::shared_ptr<impl::Subscription> pimpl = {};
158
159 State state_ = State::Invalid;
160};
161
162} // namespace PdCom
163
164#endif // PDCOM5_SUBSCRIPTION_H
Base class for PdCom protocol handler.
Definition Process.h:87
Definition Subscriber.h:107
void print(std::ostream &os, char delimiter) const
Print the value(s).
void poll()
Poll values from the server.
Process * getProcess() const
Get the assigned Process.
State getState() const noexcept
Get the current state.
Definition Subscription.h:140
Variable getVariable() const
Access the subscribed variable.
const void * getData() const
Get the data Pointer.
bool empty() const noexcept
Check whether the subscription is default-constructed.
Definition Subscription.h:135
std::string getPath() const
Get the path of the subscribed variable.
Subscription(Subscriber &subscriber, Process &process, const std::string &path, const Selector &selector={})
Constructor for an unknown variable.
Subscription()=default
Default constructor for an empty subscription.
PdCom Variable interface.
Definition Variable.h:68
Data Deserialisation helper.
Definition DataDeserializer.h:51
Selector base class for creating views on multidimensional data.
Definition Selector.h:48