mirror of
				https://github.com/hyperion-project/hyperion.ng.git
				synced 2025-03-01 10:33:28 +00:00 
			
		
		
		
	- More i18n - Easy use of mutual exclusion in JsonAPI with QMutexLocker - Smoothing type "linear" hidden in the WebUI, because there is currently only one - Message forwarding implemented again - For compatibility to home assistants and other remote controls, "activeEffects" and "activeLedColor" has been added to the JSON-RPC - FlatBuffer clear now the Priority on disconnect - The information "available V4L2 devices" is now only displayed if the device list is not empty - LED device "PiBlaster" excluded from OSX build
		
			
				
	
	
		
			104 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| // STL includes
 | |
| #include <vector>
 | |
| #include <map>
 | |
| #include <cstdint>
 | |
| #include <limits>
 | |
| 
 | |
| // QT includes
 | |
| #include <QList>
 | |
| #include <QStringList>
 | |
| #include <QHostAddress>
 | |
| #include <QJsonObject>
 | |
| #include <QJsonArray>
 | |
| #include <QJsonDocument>
 | |
| 
 | |
| // Utils includes
 | |
| #include <utils/ColorRgb.h>
 | |
| #include <utils/settings.h>
 | |
| #include <utils/Logger.h>
 | |
| #include <utils/Components.h>
 | |
| #include <utils/Image.h>
 | |
| 
 | |
| // Hyperion includes
 | |
| #include <hyperion/PriorityMuxer.h>
 | |
| 
 | |
| // Forward declaration
 | |
| class Hyperion;
 | |
| class QTcpSocket;
 | |
| class FlatBufferConnection;
 | |
| 
 | |
| class MessageForwarder : public QObject
 | |
| {
 | |
| 	Q_OBJECT
 | |
| public:
 | |
| 	MessageForwarder(Hyperion* hyperion);
 | |
| 	~MessageForwarder();
 | |
| 
 | |
| 	void addJsonSlave(QString slave);
 | |
| 	void addProtoSlave(QString slave);
 | |
| 
 | |
| private slots:
 | |
| 	///
 | |
| 	/// @brief Handle settings update from Hyperion Settingsmanager emit or this constructor
 | |
| 	/// @param type   settingyType from enum
 | |
| 	/// @param config configuration object
 | |
| 	///
 | |
| 	void handleSettingsUpdate(const settings::type &type, const QJsonDocument &config);
 | |
| 
 | |
| 	///
 | |
| 	/// @brief Handle component state change MessageForwarder
 | |
| 	/// @param component  The component from enum
 | |
| 	/// @param enable     The new state
 | |
| 	///
 | |
| 	void componentStateChanged(const hyperion::Components component, bool enable);
 | |
| 
 | |
| 	///
 | |
| 	/// @brief Handle priority updates from Priority Muxer
 | |
| 	/// @param  priority  The new visible priority
 | |
| 	///
 | |
| 	void handlePriorityChanges(const quint8 &priority);
 | |
| 
 | |
| 	///
 | |
| 	/// @brief Forward message to all json slaves
 | |
| 	/// @param message The JSON message to send
 | |
| 	///
 | |
| 	void forwardJsonMessage(const QJsonObject &message);
 | |
| 
 | |
| 	///
 | |
| 	/// @brief Forward image to all proto slaves
 | |
| 	/// @param image The PROTO image to send
 | |
| 	///
 | |
| 	void forwardProtoMessage(const Image<ColorRgb> &image);
 | |
| 
 | |
| 	///
 | |
| 	/// @brief Forward message to a single json slave
 | |
| 	/// @param message The JSON message to send
 | |
| 	/// @param socket The TCP-Socket with the connection to the slave
 | |
| 	///
 | |
| 	void sendJsonMessage(const QJsonObject &message, QTcpSocket *socket);
 | |
| 
 | |
| private:
 | |
| 	/// Hyperion instance
 | |
| 	Hyperion *_hyperion;
 | |
| 
 | |
| 	/// Logger instance
 | |
| 	Logger   *_log;
 | |
| 
 | |
| 	/// Muxer instance
 | |
| 	PriorityMuxer *_muxer;
 | |
| 
 | |
| 	// JSON connection for forwarding
 | |
| 	QStringList   _jsonSlaves;
 | |
| 
 | |
| 	/// Proto connection for forwarding
 | |
| 	QStringList _protoSlaves;
 | |
| 	QList<FlatBufferConnection*> _forwardClients;
 | |
| 
 | |
| 	/// Flag if forwarder is enabled
 | |
| 	bool _forwarder_enabled = true;
 | |
| 
 | |
| 	const int _priority;
 | |
| };
 |