DiosFileHandle.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. #pragma once
  2. // 下列 ifdef 块是创建使从 DLL 导出更简单的
  3. // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DIOSFILEHANDLE_EXPORTS
  4. // 符号编译的。在使用此 DLL 的
  5. // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
  6. // DIOSFILEHANDLE_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
  7. // 符号视为是被导出的。
  8. #ifndef DIOSFILEHANDLE_EXPORTS
  9. #ifdef _WIN64
  10. #ifdef _DEBUG
  11. #pragma comment(lib, "DiosFileHandleX64D.lib")
  12. #else
  13. #pragma comment(lib, "DiosFileHandleX64.lib")
  14. #endif
  15. #else
  16. #ifdef _DEBUG
  17. #pragma comment(lib, "DiosFileHandleD.lib")
  18. #else
  19. #pragma comment(lib, "DiosFileHandle.lib")
  20. #endif
  21. #endif
  22. #endif
  23. #ifdef DIOSFILEHANDLE_EXPORTS
  24. #define DIOSFILEHANDLE_API __declspec(dllexport)
  25. #define DIOSFILEHANDLE_C_API extern "C" __declspec(dllexport)
  26. #else
  27. #define DIOSFILEHANDLE_API __declspec(dllimport)
  28. #define DIOSFILEHANDLE_C_API extern "C" __declspec(dllimport)
  29. #endif
  30. #include <string>
  31. #include "Definitions.h"
  32. #include "ResDataObject.h"
  33. using namespace std;
  34. typedef enum _Cmd_Echo {
  35. CMD_ECHO_IGNORE = -1,
  36. CMD_ECHO_NOTARGET,
  37. CMD_ECHO_NG,
  38. CMD_ECHO_OK,
  39. CMD_ECHO_MAX
  40. }CMD_ECHO;
  41. #ifndef _Packet_Cmd
  42. typedef enum _Packet_Cmd {
  43. PACKET_CMD_NONE = -1,
  44. PACKET_CMD_OPEN,
  45. PACKET_CMD_CLOSE,
  46. PACKET_CMD_GET,
  47. PACKET_CMD_UPDATE,//更新对象
  48. PACKET_CMD_ADD,
  49. PACKET_CMD_DEL,
  50. PACKET_CMD_EXE,
  51. PACKET_CMD_DATA,
  52. PACKET_CMD_MSG,
  53. PACKET_CMD_ONLINE,//设备掉线后重新注册到Root
  54. PACKET_CMD_PART_UPDATE,//只更新对象的子节点
  55. PACKET_CMD_SET,
  56. PACKET_CMD_MAX
  57. }PACKET_CMD;
  58. #endif
  59. const string _Packet_Cmd_String[] = {
  60. "Open",
  61. "Close",
  62. "Get",
  63. "Update",
  64. "Add",
  65. "Del",
  66. "Action",
  67. "Data",
  68. "Message",
  69. "Online",
  70. "PartUpdate",
  71. "Set"
  72. };
  73. typedef enum _Packet_Type {
  74. PACKET_TYPE_NONE = -1,
  75. PACKET_TYPE_REQ,
  76. PACKET_TYPE_RES,
  77. PACKET_TYPE_NOTIFY,
  78. PACKET_TYPE_MAX
  79. }PACKET_TYPE;
  80. typedef enum _Dios_File_Flags {
  81. IMAGE_FH = 1,
  82. ACTION = 2,
  83. NOTIFY_MSG = 4,
  84. NOTIFY_UPDATE = 8,
  85. NOTIFY_DATA = 16,
  86. NOTIFY_ACTION = 32,
  87. ALL_ACCESS = 64 - 1,
  88. ABSCRACT_ONLINE = 128
  89. }DIOS_FILE_FLAGS;
  90. typedef enum _Action_Sync_Mode {
  91. ACTION_SYNC,
  92. ACTION_ASYNC,
  93. }ACTION_SYNC_MODE;
  94. #define DIOS_PACK_IDX ("IDX")
  95. #define DIOS_PACK_TYPE ("TYPE")
  96. #define DIOS_PACK_TYPE_REQ ("REQUEST")
  97. #define DIOS_PACK_TYPE_RES ("RESPONSE")
  98. #define DIOS_PACK_TYPE_NOTIFY ("NOTIFY")
  99. #define DIOS_PACK_CMD ("CMD")
  100. //#define DIOS_PACK_CMD_GET ("GET")
  101. //#define DIOS_PACK_CMD_UPDATE ("UPDATE")
  102. //#define DIOS_PACK_CMD_ADD ("ADD")
  103. //#define DIOS_PACK_CMD_DEL ("DEL")
  104. //#define DIOS_PACK_CMD_EXE ("EXE")
  105. //#define DIOS_PACK_CMD_DATA ("DATA")
  106. //#define DIOS_PACK_CMD_OPEN ("OPEN")
  107. //#define DIOS_PACK_CMD_CLOSE ("CLOSE")
  108. #define DIOS_PACKET_SYNC ("SYNC")
  109. #define DIOS_PACK_HANDLE ("HANDLE")
  110. #define DIOS_PACK_HANDLE_ROUTE ("ROUTE")
  111. #define DIOS_PACK_HANDLE_FLAGS ("FLAGS")
  112. #define DIOS_PACK_HANDLE_LANG ("LANG")
  113. #define DIOS_PACKET_HANDLE_KEY ("HANDLEID")
  114. #define DIOS_PACK_HANDLE_OWNERID ("OWNERID")
  115. #define DIOS_PACK_HANDLE_DEVID ("DEVID")
  116. #define DIOS_PACK_TARGET_BUSID ("EBUSID")
  117. #define DIOS_PACK_TARGET_MACHINEID ("MACHINEID")
  118. #define DIOS_PACK_TARGET_PROCID ("PROCID")
  119. #define DIOS_PACK_TARGET_ADDR ("ADDR")
  120. #define DIOS_PACK_KEY ("KEY")
  121. #define DIOS_PACK_ACTION ("Action")
  122. #define DIOS_PACK_CONTEXT ("CONTEXT")
  123. #define DIOS_PACK_RETURN ("RET")
  124. #define DIOS_PACK_CODE ("CODE")
  125. #define DIOS_PACK_MSG ("MSG")
  126. #define DIOS_PACKET_VER ("Ver")
  127. #define DIOS_PACKET_VER_NOW ("3")
  128. #define DIOS_TOPIC ("TOPIC")
  129. #define DIOS_PUBLISH ("PUBLISH")
  130. #define DIOS_RESP_TOPIC ("RespTopic")
  131. #define DIOS_TRANSACTION ("Transaction")
  132. #define DIOS_CLIENT_ROOT_TOPIC ("DIOS/CLIENT/PLATFORM")
  133. #define DIOS_CLIENT_ID_PREFIX ("DIOS_CLIENT_")
  134. //因为路由要发往Local or Eth,
  135. //OPEN命令除了TargetBusID以外,没有其他信息,导致无法确定是发给哪个方向.
  136. //所以额外添加此ROUTE Flag到文件句柄中
  137. //这个选项只在内部跟不同Channel通信的时候用,应用的Client应该缺省就是Any.
  138. //框架层截断应用层的包,并由框架层分析并判断发给谁.
  139. //any:路由方向是先发往本地,如果本地无目的地,再次发往Eth.
  140. //Local:路由方向就是本地,同理,Req&Res&Notify应该都是本地.
  141. //Eth:路由方向就是远程机器,其他同上.
  142. typedef enum _Dios_Packet_Route {
  143. DIOS_PACKET_ROUTE_NOTARGET = -1,//can't send
  144. DIOS_PACKET_ROUTE_ANY,//to any possible direction
  145. DIOS_PACKET_ROUTE_LOCAL,//only local machine
  146. DIOS_PACKET_ROUTE_ETH,//only remote machine
  147. DIOS_PACKET_ROUTE_MAX
  148. }DIOS_PACKET_ROUTE;
  149. class DIOSFILEHANDLE_API DiosTargetAddress {
  150. string *m_pKey;
  151. string *m_ValString;
  152. ResDataObject * m_pTargetObject;
  153. public:
  154. DiosTargetAddress(void);
  155. DiosTargetAddress(const DiosTargetAddress &tValue);
  156. virtual ~DiosTargetAddress(void);
  157. virtual const char *GetVal();
  158. bool operator ==(const DiosTargetAddress &target);
  159. DiosTargetAddress& operator = (const DiosTargetAddress &tValue);
  160. void GetResDataObject(ResDataObject &obj);
  161. bool SetResDataObject(ResDataObject &obj);
  162. virtual bool SetVal(const char* pValString);
  163. void SetKey(const char *pKey);
  164. const char *GetKey();
  165. ResDataObject &operator [](const char *pKey);
  166. void PrintOut();//for test
  167. };
  168. class DIOSFILEHANDLE_API DiosDevFileHandle {
  169. string *m_pKey;
  170. string *m_ValString;
  171. ResDataObject *m_pRoute;//0:any,1:local,2:eth
  172. ResDataObject *m_pFlags;
  173. ResDataObject *m_pLang;
  174. ResDataObject *m_pHandleId;
  175. DiosTargetAddress *m_pOwner;
  176. DiosTargetAddress *m_pDev;
  177. public:
  178. DiosDevFileHandle(void);
  179. DiosDevFileHandle(const DiosDevFileHandle &tValue);
  180. virtual ~DiosDevFileHandle(void);
  181. void SetKey(const char *pKey);
  182. const char *GetKey();
  183. void GetResDataObject(ResDataObject &obj);
  184. bool SetResDataObject(ResDataObject &obj);
  185. virtual const char *GetVal();
  186. virtual bool SetVal(const char* pValString);
  187. DiosTargetAddress &GetTarget(bool Owner = true);
  188. DiosDevFileHandle& operator = (const DiosDevFileHandle &tValue);
  189. ResDataObject &operator [](const char *pKey);
  190. bool operator ==(const DiosDevFileHandle &target);
  191. void PrintOut();//for test
  192. };