SysIF.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #pragma once
  2. // 下列 ifdef 块是创建使从 DLL 导出更简单的
  3. // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 SYSIF_EXPORTS
  4. // 符号编译的。在使用此 DLL 的
  5. // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
  6. // SYSIF_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
  7. // 符号视为是被导出的。
  8. #ifndef SYSIF_EXPORTS
  9. #ifdef _WIN64
  10. #ifdef _DEBUG
  11. #pragma comment(lib, "SysIFX64D.lib")
  12. #else
  13. #pragma comment(lib, "SysIFX64.lib")
  14. #endif
  15. #else
  16. #ifdef _DEBUG
  17. #pragma comment(lib, "SysIFD.lib")
  18. #else
  19. #pragma comment(lib, "SysIF.lib")
  20. #endif
  21. #endif
  22. #endif
  23. #ifdef SYSIF_EXPORTS
  24. #define SYSIF_API __declspec(dllexport)
  25. #else
  26. #define SYSIF_API __declspec(dllimport)
  27. #endif
  28. #include "MsgVector.h"
  29. #include "LogicDevice.h"
  30. #include "CcosThread.h"
  31. //#include "DriverThread.h"
  32. class SYSIF_API SysIF : public LogicDeviceSysIF
  33. {
  34. HANDLE m_Lock;
  35. HANDLE m_InternalLock;
  36. protected:
  37. bool InternalLock(DWORD timeout = INFINITE);
  38. void InternalUnLock();
  39. public:
  40. SysIF(void);
  41. virtual ~SysIF(void);
  42. bool Lock(DWORD timeout = INFINITE);
  43. void UnLock();
  44. //Notify,Actions
  45. //notify from lower layer
  46. virtual RET_STATUS HW_ACTION CmdFromLogicDev(ResDataObject PARAM_IN *pCmd);
  47. //virtual RET_STATUS SYSTEM_CALL CmdToLogicDev(ResDataObject PARAM_IN *pCmd);
  48. };
  49. /*
  50. class SYSIF_API ClientSysIF : public SysIF
  51. {
  52. MsgVector<DWORD> *m_pRequestList;
  53. public:
  54. ClientSysIF(void);
  55. virtual ~ClientSysIF(void);
  56. void RegistClientToCDI();
  57. void UnRegistClientFromCDI();
  58. void RegistRequest(DWORD Idx);
  59. void UnRegistRequest(DWORD Idx);
  60. bool IsAllRequestFinished();
  61. void Clear();
  62. virtual RET_STATUS HW_ACTION CmdFromLogicDev(ResDataObject PARAM_IN *pCmd);
  63. virtual RET_STATUS SYSTEM_CALL CmdToLogicDev(ResDataObject PARAM_IN *pCmd);
  64. };
  65. */
  66. class SYSIF_API ServerSysIF : public SysIF
  67. {
  68. //Dual_Driver_Thread *m_pDeviceThread;
  69. Work_Thread *m_pDeviceReqThread;
  70. Work_Thread* m_pDeviceResThread;
  71. public:
  72. ServerSysIF(void);
  73. virtual ~ServerSysIF(void);
  74. //void SetWorkThread(Dual_Driver_Thread *p);
  75. void SetWorkThread(Work_Thread* pDeviceReqThread, Work_Thread* pDeviceResThread);
  76. virtual RET_STATUS HW_ACTION CmdFromLogicDev(ResDataObject PARAM_IN *pCmd);
  77. virtual RET_STATUS SYSTEM_CALL CmdToLogicDev(ResDataObject PARAM_IN *pCmd);
  78. };
  79. /*
  80. using ccos_mqtt_callback = std::function<void(ResDataObject*, const char*)>;
  81. using ccos_mqtt_msg_filter_func = std::function<bool(ResDataObject*)>;
  82. using ccos_mqtt_msg_filter = std::tuple<ccos_mqtt_msg_filter_func, HANDLE, ResDataObject*>;
  83. using ccos_mqtt_connection = std::tuple<const void*, const void*, const void*>; //三元组,mqtt客户端/标准回调函数/消息钩子
  84. //创建额外连接,需要提供回调函数
  85. SYSIF_API ccos_mqtt_connection* NewConnection(const char* pszClientID, ccos_mqtt_callback onmsg);
  86. SYSIF_API void CloseConnection(ccos_mqtt_connection* hConnection);
  87. //主动订阅主题
  88. SYSIF_API int SubscribeTopic(ccos_mqtt_connection* hConnection, const char* pszTopic, bool isShare = false);
  89. //主题订阅取消
  90. SYSIF_API int UnSubscribe(ccos_mqtt_connection* hConnection, const char* pszTopic);
  91. //往指定主题发送CCOS协议包整包,使用临时创建连接,仅发送,不接收
  92. SYSIF_API int PublishMsg(ResDataObject* pCmd, const char* pszTopic, const char* pszSenderName);
  93. //往指定主题发送CCOS协议包整包,使用已创建的连接发送
  94. SYSIF_API int PublishAction(ResDataObject* pAction, const char* pszTopic, ccos_mqtt_connection *hConnection = nullptr);
  95. //往指定主题发送Action包,携带参数,并指定答复的Topic,异步模式处理Resp,需要在对应连接的回调中处理
  96. SYSIF_API int PublishAction(const char* pAction, ResDataObject *pContext, const char* pszTopic, const char* pszRespTopic, ccos_mqtt_connection* hConnection = nullptr);
  97. //使用现有连接 往指定主题发送Action包,携带参数,并指定答复的Topic,同步等待resp,超时没收到应答返回失败,复用链接时须小心,该函数会
  98. SYSIF_API int ActionAndRespWithConnection(ccos_mqtt_connection* hConnection ,const char* pAction, ResDataObject& req, ResDataObject *pContext, const char* pszTopic, const char* pszRespTopic, ResDataObject& resObj,
  99. DWORD dwWaitTime);
  100. //使用现有连接 往指定主题发送Action包,携带参数,复用连接订阅的默认Topic,通过提供的消息钩子 等待resp,超时没收到应答返回失败,
  101. SYSIF_API int ActionAndRespWithConnDefalt(ccos_mqtt_connection* hConnection ,const char* pAction, ResDataObject& req, ResDataObject *pContext, const char* pszTopic, ResDataObject& resObj, DWORD dwWaitTime);
  102. //往指定主题发送Action包,携带参数,并指定答复的Topic,同步等待resp,临时创建连接,并等待应答,超时没收到应答返回失败
  103. SYSIF_API int ActionAndResp(const char* pAction, ResDataObject *pContext, const char* pszTopic, const char* pszRespTopic, ResDataObject& resObj,
  104. DWORD dwWaitTime, const char* pszSenderName);
  105. */