mirror of
				https://github.com/hyperion-project/hyperion.ng.git
				synced 2025-03-01 10:33:28 +00:00 
			
		
		
		
	* Stop Web-Capture when priority changes * Remote control UI: Treat duration=0 as endless * Stop Web-Capture on non-Image events changes * LED Matrix Layout - Support vertical cabling direction * Additional Yeelight models * Treat http headers case insensitive * Update change log * Treat http headers case insensitive (consider Qt version) * API - Consider provided format when setImage * UI - Support Boblight configuration per LED instance * Support multiple Boblight clients with different priorities * Update changelog * Simplify isGUI rules allowing for QT only builds * Sysinfo: Fix indents * LED-Devices: Show warning, if get properties failed * Qt-Grabber: Fixed position handling of multiple monitors * LED layout: Remove indention limitations * Yeelight: Test YLTD003 * hyperion-remote: Provide image filename to muxer/UI * Refactor PriorityMuxer and related * Temp: Build under Windows 2019 * Yeelight: Remove YLTD003 as it is not working without additional changes * Test Windows-latest with out removing redistributables/new MSVC * correct workflows * correct CI script * Build Windows with Qt 5.15.2 * Priority Muxer: Updates after testing * Fix Typo * Update BGHandler * QTGrabber - Reactivate windows code to avoid cursor issues * Emit prioritiesChanged when autoselect was changed by user Co-authored-by: Paulchen Panther <Paulchen-Panter@protonmail.com>
		
			
				
	
	
		
			115 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			2.6 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() override;
 | 
						|
 | 
						|
	void addJsonTarget(const QJsonObject& targetConfig);
 | 
						|
	void addFlatbufferTarget(const QJsonObject& targetConfig);
 | 
						|
 | 
						|
private slots:
 | 
						|
	///
 | 
						|
	/// @brief Handle settings update from Hyperion Settingsmanager emit or this constructor
 | 
						|
	/// @param type   settingyType from enum
 | 
						|
	/// @param config configuration object
 | 
						|
	///
 | 
						|
	void handleSettingsUpdate(settings::type type, const QJsonDocument &config);
 | 
						|
 | 
						|
	///
 | 
						|
	/// @brief Handle component state change MessageForwarder
 | 
						|
	/// @param component  The component from enum
 | 
						|
	/// @param enable     The new state
 | 
						|
	///
 | 
						|
	void handleCompStateChangeRequest(hyperion::Components component, bool enable);
 | 
						|
 | 
						|
	///
 | 
						|
	/// @brief Handle priority updates from Priority Muxer
 | 
						|
	/// @param  priority  The new visible priority
 | 
						|
	///
 | 
						|
	void handlePriorityChanges(int priority);
 | 
						|
 | 
						|
	///
 | 
						|
	/// @brief Forward message to all json target hosts
 | 
						|
	/// @param message The JSON message to send
 | 
						|
	///
 | 
						|
	void forwardJsonMessage(const QJsonObject &message);
 | 
						|
 | 
						|
	///
 | 
						|
	/// @brief Forward image to all flatbuffer target hosts
 | 
						|
	/// @param image The flatbuffer image to send
 | 
						|
	///
 | 
						|
	void forwardFlatbufferMessage(const QString& name, const Image<ColorRgb> &image);
 | 
						|
 | 
						|
	///
 | 
						|
	/// @brief Forward message to a single json target host
 | 
						|
	/// @param message The JSON message to send
 | 
						|
	/// @param socket The TCP-Socket with the connection to the target host
 | 
						|
	///
 | 
						|
	void sendJsonMessage(const QJsonObject &message, QTcpSocket *socket);
 | 
						|
 | 
						|
private:
 | 
						|
 | 
						|
	struct TargetHost {
 | 
						|
		QHostAddress host;
 | 
						|
		quint16 port;
 | 
						|
 | 
						|
		bool operator == (TargetHost const& a) const
 | 
						|
		{
 | 
						|
			return ((host == a.host) && (port == a.port));
 | 
						|
		}
 | 
						|
	};
 | 
						|
 | 
						|
	/// Hyperion instance
 | 
						|
	Hyperion *_hyperion;
 | 
						|
 | 
						|
	/// Logger instance
 | 
						|
	Logger   *_log;
 | 
						|
 | 
						|
	/// Muxer instance
 | 
						|
	PriorityMuxer *_muxer;
 | 
						|
 | 
						|
	// JSON connections for forwarding
 | 
						|
	QList<TargetHost> _jsonTargets;
 | 
						|
 | 
						|
	/// Flatbuffer connection for forwarding
 | 
						|
	QList<TargetHost> _flatbufferTargets;
 | 
						|
	QList<FlatBufferConnection*> _forwardClients;
 | 
						|
 | 
						|
	/// Flag if forwarder is enabled
 | 
						|
	bool _forwarder_enabled = true;
 | 
						|
 | 
						|
	const int _priority;
 | 
						|
};
 |