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