CuteHMI - CuteHMI (CuteHMI.2)
Messenger.hpp
1 #ifndef H_EXTENSIONS_CUTEHMI_2_INCLUDE_CUTEHMI_MESSENGER_HPP
2 #define H_EXTENSIONS_CUTEHMI_2_INCLUDE_CUTEHMI_MESSENGER_HPP
3 
4 #include "internal/common.hpp"
5 #include "Message.hpp"
6 #include "ExceptionMixin.hpp"
7 #include "Singleton.hpp"
8 
9 #include <QObject>
10 #include <QMutexLocker>
11 
12 namespace cutehmi {
13 
17 class CUTEHMI_API Messenger:
18  public QObject,
19  public Singleton<Messenger>
20 {
21  Q_OBJECT
22 
23  friend class Singleton<Messenger>;
24 
25  public:
29  class CUTEHMI_API NoAdvertiserException:
30  public ExceptionMixin<NoAdvertiserException>
31  {
33 
34  public:
35  explicit NoAdvertiserException(Message & message);
36 
38 
39  NoAdvertiserException & operator =(const NoAdvertiserException & other);
40 
45  const Message * message() const;
46 
47  private:
48  struct Members
49  {
51  };
52 
53  MPtr<Members> m;
54  };
55 
65  Q_INVOKABLE void advertise(Message * message_l);
66 
73  Q_INVOKABLE void resetAdvertiser(QObject * advertiser);
74 
75  signals:
82  void messageRequested(QVariant message);
83 
84  protected:
85  explicit Messenger(QObject * parent = nullptr);
86 
87  struct Members
88  {
89  QMutex requestMutex {};
90  QObject * advertiser {nullptr};
91  };
92 
94 };
95 
96 }
97 
98 #endif
99 
100 //(c)C: Copyright © 2019, Michał Policht <michal@policht.pl>. All rights reserved.
101 //(c)C: This file is a part of CuteHMI.
102 //(c)C: CuteHMI is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
103 //(c)C: CuteHMI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
104 //(c)C: You should have received a copy of the GNU Lesser General Public License along with CuteHMI. If not, see <https://www.gnu.org/licenses/>.
QMutex
cutehmi::Messenger::Members
Definition: Messenger.hpp:87
cutehmi::Message
Message.
Definition: Message.hpp:19
cutehmi::Messenger::NoAdvertiserException
No advertiser exception.
Definition: Messenger.hpp:29
cutehmi::ExceptionMixin
Exception mixin.
Definition: ExceptionMixin.hpp:16
cutehmi::MPtr< Members >
cutehmi::Messenger
Messenger.
Definition: Messenger.hpp:17
QObject
cutehmi
Definition: constants.hpp:6
cutehmi::Messenger::m
MPtr< Members > m
Definition: Messenger.hpp:93
QVariant
std::unique_ptr
cutehmi::Singleton
Singleton template.
Definition: Singleton.hpp:29