PicoScenes API Docs
 
Loading...
Searching...
No Matches
PicoScenesMessagingService.hxx
Go to the documentation of this file.
1//
2// Created by Zhiping Jiang on 7/17/22.
3//
4
5#ifndef PICOSCENES_PLATFORM_PICOSCENESMESSAGINGSERVICE_HXX
6#define PICOSCENES_PLATFORM_PICOSCENESMESSAGINGSERVICE_HXX
7
8#include <any>
9#include "BoostHeaders.hxx"
10#include "NICPortal.hxx"
11
12using UniversalMessageType = std::tuple<std::any, std::string, std::string, std::string>;
13
18public:
19 static std::shared_ptr<PicoScenesMessagingService> getInstance(const std::string &messagingChannelId = "default");
20
21 static UniversalMessageType makeMessage(const std::any &object, const std::string &destination, const std::string &source, const std::string &description);
22
24
26
27 void send(const ModularPicoScenesRxFrame &rxFrame, const std::string &destination, const std::string &source, const std::string &description = "");
28
29 void send(const ModularPicoScenesTxFrame &txFrame, const std::string &destination, const std::string &source, const std::string &description = "");
30
31 void send(const std::string &textContent, const std::string &destination, const std::string &source, const std::string &description = "");
32
33 void send(const pt::ptree &ptree, const std::string &destination, const std::string &source, const std::string &description = "");
34
35 void send(const U8Vector &data, const std::string &destination, const std::string &source, const std::string &description = "");
36
37 void send(const uint8_t *data, size_t bufferLength, const std::string &destination, const std::string &source, const std::string &description = "");
38
39 void registerMessageHandler(const std::string &handlerName, std::function<void(const UniversalMessageType &)> handler);
40
41 void unregisterHandler(const std::string &handlerName);
42
43private:
45
46 bool serviceState = true;
47
48 std::deque<UniversalMessageType> appendingMessageQueue;
49
50 std::mutex queueMutex;
51 std::mutex handleMutex;
52 std::deque<UniversalMessageType> messageQueue;
53 std::map<std::string, std::function<void(const UniversalMessageType &)>> handlers;
54
55 std::mutex queueOperationMutex;
56 std::condition_variable queueOperationCV;
57
58
59 void messagingServiceLoop();
60};
61
62
63#endif //PICOSCENES_PLATFORM_PICOSCENESMESSAGINGSERVICE_HXX
std::tuple< std::any, std::string, std::string, std::string > UniversalMessageType
The messaging service for PicoScenes Platform.
void send(const U8Vector &data, const std::string &destination, const std::string &source, const std::string &description="")
void registerMessageHandler(const std::string &handlerName, std::function< void(const UniversalMessageType &)> handler)
void send(const std::string &textContent, const std::string &destination, const std::string &source, const std::string &description="")
void send(const ModularPicoScenesRxFrame &rxFrame, const std::string &destination, const std::string &source, const std::string &description="")
void send(const uint8_t *data, size_t bufferLength, const std::string &destination, const std::string &source, const std::string &description="")
static std::shared_ptr< PicoScenesMessagingService > getInstance(const std::string &messagingChannelId="default")
void send(const pt::ptree &ptree, const std::string &destination, const std::string &source, const std::string &description="")
void append2MessageQueue(const UniversalMessageType &message)
void unregisterHandler(const std::string &handlerName)
static UniversalMessageType makeMessage(const std::any &object, const std::string &destination, const std::string &source, const std::string &description)
void send(const ModularPicoScenesTxFrame &txFrame, const std::string &destination, const std::string &source, const std::string &description="")