1 #pragma once
2 
3 #include "../../main/StoppableTask.h"
4 
5 //
6 //	Domoticz Plugin System - Dnpwwo, 2016
7 //
8 
9 class CDomoticzHardwareBase;
10 
11 namespace Plugins {
12 
13 	class CPluginSystem : public StoppableTask
14 	{
15 	private:
16 		bool	m_bEnabled;
17 		bool	m_bAllPluginsStarted;
18 		int		m_iPollInterval;
19 
20 		void*	m_InitialPythonThread;
21 
22 		static	std::map<int, CDomoticzHardwareBase*>	m_pPlugins;
23 		static	std::map<std::string, std::string>		m_PluginXml;
24 
25 		std::shared_ptr<std::thread> m_thread;
26 		std::mutex m_mutex;
27 
28 		void Do_Work();
29 	public:
30 		CPluginSystem();
31 		~CPluginSystem(void);
32 
33 		bool StartPluginSystem();
34 		void BuildManifest();
GetManifest()35 		std::map<std::string, std::string>* GetManifest() { return &m_PluginXml; };
GetHardware()36 		std::map<int, CDomoticzHardwareBase*>* GetHardware() { return &m_pPlugins; };
37 		CDomoticzHardwareBase* RegisterPlugin(const int HwdID, const std::string &Name, const std::string &PluginKey);
38 		void	 DeregisterPlugin(const int HwdID);
39 		bool	StopPluginSystem();
AllPluginsStarted()40 		void	AllPluginsStarted() { m_bAllPluginsStarted = true; };
41 		static void LoadSettings();
42 		void	DeviceModified(uint64_t ID);
PythonThread()43 		void*	PythonThread() { return m_InitialPythonThread; };
44 	};
45 };
46 
47