DeviceController.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "DeviceController.h"
  2. #include "JobModule.h"
  3. #include "RunnableModule.h"
  4. #include "LibraryLoader.h"
  5. #include <QtCore/QDebug>
  6. #include <typeinfo>
  7. #include <type_traits>
  8. DeviceController::DeviceController()
  9. {
  10. m_pModule = nullptr;
  11. m_pDataConsumer = nullptr;
  12. }
  13. void DeviceController::regConsumer(DataConsumer* pDC)
  14. {
  15. m_pDataConsumer = pDC;
  16. }
  17. void DeviceController::OnData(std::string name,QVariant val)
  18. {
  19. // qDebug() << __FILE__ << __LINE__ << name.c_str() << " val = " << val.toString();
  20. if( m_pDataConsumer != nullptr )
  21. {
  22. m_pDataConsumer->OnData(name,val);
  23. }
  24. }
  25. void DeviceController::OnSubData(std::string name,std::string val)
  26. {
  27. if( m_pModule != nullptr )
  28. {
  29. m_pModule->OnSubData(name,val);
  30. }
  31. }
  32. void DeviceController::CreateDevice(const std::string name,const std::list<AlarmRuler>& lst)
  33. {
  34. std::string assemblyName = name;
  35. BaseModule* pModule = LibraryLoader::load<BaseModule>(assemblyName);
  36. if( pModule == nullptr )
  37. {
  38. qCritical() << __FILE__ << __LINE__ << " load " << assemblyName.c_str() << " failed.";
  39. return;
  40. }
  41. // 组装一下数据,要不就得改接口,填充到Properties
  42. ModuleInfo mi;
  43. std::list<AlarmRuler>::iterator itr;
  44. for(itr = lst.begin(); itr != lst.end(); ++itr)
  45. {
  46. DataItem data;
  47. mi.Properties.push_back( data);
  48. }
  49. m_pModule = pModule;
  50. m_pModule->Setup(mi);
  51. m_pModule->regConsumer(this);
  52. if( m_pModule->isInheritedFrom("RunnableModule"))
  53. {
  54. RunnableModule* pRunable = dynamic_cast<RunnableModule*>(m_pModule);
  55. pRunable->Run();
  56. }
  57. if( m_pModule->isInheritedFrom("JobModule"))
  58. {
  59. JobModule* pJob = dynamic_cast<JobModule*>(m_pModule);
  60. pJob->Process(QObject());
  61. }
  62. }