WPILibC++  unspecified
EntryNotifier.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) FIRST 2015-2018. All Rights Reserved. */
3 /* Open Source Software - may be modified and shared by FRC teams. The code */
4 /* must be accompanied by the FIRST BSD license file in the root directory of */
5 /* the project. */
6 /*----------------------------------------------------------------------------*/
7 
8 #ifndef NTCORE_ENTRYNOTIFIER_H_
9 #define NTCORE_ENTRYNOTIFIER_H_
10 
11 #include <atomic>
12 #include <memory>
13 #include <string>
14 
15 #include "CallbackManager.h"
16 #include "Handle.h"
17 #include "IEntryNotifier.h"
18 #include "ntcore_cpp.h"
19 
20 namespace wpi {
21 class Logger;
22 } // namespace wpi
23 
24 namespace nt {
25 
26 namespace impl {
27 
29  : public ListenerData<std::function<void(const EntryNotification& event)>> {
30  EntryListenerData() = default;
32  std::function<void(const EntryNotification& event)> callback_,
33  StringRef prefix_, unsigned int flags_)
34  : ListenerData(callback_), prefix(prefix_), flags(flags_) {}
36  std::function<void(const EntryNotification& event)> callback_,
37  NT_Entry entry_, unsigned int flags_)
38  : ListenerData(callback_), entry(entry_), flags(flags_) {}
39  EntryListenerData(unsigned int poller_uid_, StringRef prefix_,
40  unsigned int flags_)
41  : ListenerData(poller_uid_), prefix(prefix_), flags(flags_) {}
42  EntryListenerData(unsigned int poller_uid_, NT_Entry entry_,
43  unsigned int flags_)
44  : ListenerData(poller_uid_), entry(entry_), flags(flags_) {}
45 
46  std::string prefix;
47  NT_Entry entry = 0;
48  unsigned int flags;
49 };
50 
52  : public CallbackThread<EntryNotifierThread, EntryNotification,
53  EntryListenerData> {
54  public:
55  explicit EntryNotifierThread(int inst) : m_inst(inst) {}
56 
57  bool Matches(const EntryListenerData& listener,
58  const EntryNotification& data);
59 
60  void SetListener(EntryNotification* data, unsigned int listener_uid) {
61  data->listener =
62  Handle(m_inst, listener_uid, Handle::kEntryListener).handle();
63  }
64 
65  void DoCallback(std::function<void(const EntryNotification& event)> callback,
66  const EntryNotification& data) {
67  callback(data);
68  }
69 
70  int m_inst;
71 };
72 
73 } // namespace impl
74 
76  : public IEntryNotifier,
77  public CallbackManager<EntryNotifier, impl::EntryNotifierThread> {
78  friend class EntryNotifierTest;
79  friend class CallbackManager<EntryNotifier, impl::EntryNotifierThread>;
80 
81  public:
82  explicit EntryNotifier(int inst, wpi::Logger& logger);
83 
84  void Start();
85 
86  bool local_notifiers() const override;
87 
88  unsigned int Add(std::function<void(const EntryNotification& event)> callback,
89  llvm::StringRef prefix, unsigned int flags) override;
90  unsigned int Add(std::function<void(const EntryNotification& event)> callback,
91  unsigned int local_id, unsigned int flags) override;
92  unsigned int AddPolled(unsigned int poller_uid, llvm::StringRef prefix,
93  unsigned int flags) override;
94  unsigned int AddPolled(unsigned int poller_uid, unsigned int local_id,
95  unsigned int flags) override;
96 
97  void NotifyEntry(unsigned int local_id, StringRef name,
98  std::shared_ptr<Value> value, unsigned int flags,
99  unsigned int only_listener = UINT_MAX) override;
100 
101  private:
102  int m_inst;
103  wpi::Logger& m_logger;
104  std::atomic_bool m_local_notifiers;
105 };
106 
107 } // namespace nt
108 
109 #endif // NTCORE_ENTRYNOTIFIER_H_
Definition: CallbackManager.h:54
NetworkTables Entry Notification.
Definition: ntcore_cpp.h:169
Definition: EntryNotifier.h:75
Definition: SocketError.cpp:17
Definition: Handle.h:20
Definition: IEntryNotifier.h:16
Definition: EntryNotifier.h:28
Definition: CallbackManager.h:168
Definition: Logger.h:30
NT_EntryListener listener
Listener that was triggered.
Definition: ntcore_cpp.h:182
Definition: CallbackManager.h:30
Definition: EntryNotifier.h:51
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:42
Definition: IEntryNotifier.h:18