PdCom  5.3
Process data communication client
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 
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 
41 namespace PdCom {
42 
43 namespace impl {
44 class Subscription;
45 } // namespace impl
46 
47 class Process;
48 class Variable;
49 class Subscriber;
50 
64 class 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 
123  Variable getVariable() const;
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 
145  Process *getProcess() const;
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
Selector base class for creating views on multidimensional data.
Definition: Selector.h:47
bool empty() const noexcept
Check whether the subscription is default-constructed.
Definition: Subscription.h:135
PdCom Variable interface.
Definition: Variable.h:67
PdCom Subscription interface.
Definition: Subscription.h:64
Base class for PdCom protocol handler.
Definition: Process.h:86
State getState() const noexcept
Get the current state.
Definition: Subscription.h:140
Definition: Subscriber.h:106
Data Deserialisation helper.
Definition: DataDeserializer.h:50
Definition: ClientStatistics.h:31