#pragma once // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 SYSIF_EXPORTS // 符号编译的。在使用此 DLL 的 // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 // SYSIF_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 // 符号视为是被导出的。 #ifndef SYSIF_EXPORTS #ifdef _WIN64 #ifdef _DEBUG #pragma comment(lib, "SysIFX64D.lib") #else #pragma comment(lib, "SysIFX64.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "SysIFD.lib") #else #pragma comment(lib, "SysIF.lib") #endif #endif #endif #ifdef SYSIF_EXPORTS #define SYSIF_API __declspec(dllexport) #else #define SYSIF_API __declspec(dllimport) #endif #include "MsgVector.h" #include "LogicDevice.h" #include "CcosThread.h" //#include "DriverThread.h" class SYSIF_API SysIF : public LogicDeviceSysIF { HANDLE m_Lock; HANDLE m_InternalLock; protected: bool InternalLock(DWORD timeout = INFINITE); void InternalUnLock(); public: SysIF(void); virtual ~SysIF(void); bool Lock(DWORD timeout = INFINITE); void UnLock(); //Notify,Actions //notify from lower layer virtual RET_STATUS HW_ACTION CmdFromLogicDev(ResDataObject PARAM_IN *pCmd); //virtual RET_STATUS SYSTEM_CALL CmdToLogicDev(ResDataObject PARAM_IN *pCmd); }; /* class SYSIF_API ClientSysIF : public SysIF { MsgVector *m_pRequestList; public: ClientSysIF(void); virtual ~ClientSysIF(void); void RegistClientToCDI(); void UnRegistClientFromCDI(); void RegistRequest(DWORD Idx); void UnRegistRequest(DWORD Idx); bool IsAllRequestFinished(); void Clear(); virtual RET_STATUS HW_ACTION CmdFromLogicDev(ResDataObject PARAM_IN *pCmd); virtual RET_STATUS SYSTEM_CALL CmdToLogicDev(ResDataObject PARAM_IN *pCmd); }; */ class SYSIF_API ServerSysIF : public SysIF { //Dual_Driver_Thread *m_pDeviceThread; Work_Thread *m_pDeviceReqThread; Work_Thread* m_pDeviceResThread; public: ServerSysIF(void); virtual ~ServerSysIF(void); //void SetWorkThread(Dual_Driver_Thread *p); void SetWorkThread(Work_Thread* pDeviceReqThread, Work_Thread* pDeviceResThread); virtual RET_STATUS HW_ACTION CmdFromLogicDev(ResDataObject PARAM_IN *pCmd); virtual RET_STATUS SYSTEM_CALL CmdToLogicDev(ResDataObject PARAM_IN *pCmd); }; /* using ccos_mqtt_callback = std::function; using ccos_mqtt_msg_filter_func = std::function; using ccos_mqtt_msg_filter = std::tuple; using ccos_mqtt_connection = std::tuple; //三元组,mqtt客户端/标准回调函数/消息钩子 //创建额外连接,需要提供回调函数 SYSIF_API ccos_mqtt_connection* NewConnection(const char* pszClientID, ccos_mqtt_callback onmsg); SYSIF_API void CloseConnection(ccos_mqtt_connection* hConnection); //主动订阅主题 SYSIF_API int SubscribeTopic(ccos_mqtt_connection* hConnection, const char* pszTopic, bool isShare = false); //主题订阅取消 SYSIF_API int UnSubscribe(ccos_mqtt_connection* hConnection, const char* pszTopic); //往指定主题发送CCOS协议包整包,使用临时创建连接,仅发送,不接收 SYSIF_API int PublishMsg(ResDataObject* pCmd, const char* pszTopic, const char* pszSenderName); //往指定主题发送CCOS协议包整包,使用已创建的连接发送 SYSIF_API int PublishAction(ResDataObject* pAction, const char* pszTopic, ccos_mqtt_connection *hConnection = nullptr); //往指定主题发送Action包,携带参数,并指定答复的Topic,异步模式处理Resp,需要在对应连接的回调中处理 SYSIF_API int PublishAction(const char* pAction, ResDataObject *pContext, const char* pszTopic, const char* pszRespTopic, ccos_mqtt_connection* hConnection = nullptr); //使用现有连接 往指定主题发送Action包,携带参数,并指定答复的Topic,同步等待resp,超时没收到应答返回失败,复用链接时须小心,该函数会 SYSIF_API int ActionAndRespWithConnection(ccos_mqtt_connection* hConnection ,const char* pAction, ResDataObject& req, ResDataObject *pContext, const char* pszTopic, const char* pszRespTopic, ResDataObject& resObj, DWORD dwWaitTime); //使用现有连接 往指定主题发送Action包,携带参数,复用连接订阅的默认Topic,通过提供的消息钩子 等待resp,超时没收到应答返回失败, SYSIF_API int ActionAndRespWithConnDefalt(ccos_mqtt_connection* hConnection ,const char* pAction, ResDataObject& req, ResDataObject *pContext, const char* pszTopic, ResDataObject& resObj, DWORD dwWaitTime); //往指定主题发送Action包,携带参数,并指定答复的Topic,同步等待resp,临时创建连接,并等待应答,超时没收到应答返回失败 SYSIF_API int ActionAndResp(const char* pAction, ResDataObject *pContext, const char* pszTopic, const char* pszRespTopic, ResDataObject& resObj, DWORD dwWaitTime, const char* pszSenderName); */