123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- #pragma once
- // 下列 ifdef 块是创建使从 DLL 导出更简单的
- // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DIOSFILEHANDLE_EXPORTS
- // 符号编译的。在使用此 DLL 的
- // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
- // DIOSFILEHANDLE_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
- // 符号视为是被导出的。
- #ifndef DIOSFILEHANDLE_EXPORTS
- #ifdef _WIN64
- #ifdef _DEBUG
- #pragma comment(lib, "DiosFileHandleX64D.lib")
- #else
- #pragma comment(lib, "DiosFileHandleX64.lib")
- #endif
- #else
- #ifdef _DEBUG
- #pragma comment(lib, "DiosFileHandleD.lib")
- #else
- #pragma comment(lib, "DiosFileHandle.lib")
- #endif
- #endif
- #endif
- #ifdef DIOSFILEHANDLE_EXPORTS
- #define DIOSFILEHANDLE_API __declspec(dllexport)
- #define DIOSFILEHANDLE_C_API extern "C" __declspec(dllexport)
- #else
- #define DIOSFILEHANDLE_API __declspec(dllimport)
- #define DIOSFILEHANDLE_C_API extern "C" __declspec(dllimport)
- #endif
- #include <string>
- #include "Definitions.h"
- #include "ResDataObject.h"
- using namespace std;
- typedef enum _Cmd_Echo {
- CMD_ECHO_IGNORE = -1,
- CMD_ECHO_NOTARGET,
- CMD_ECHO_NG,
- CMD_ECHO_OK,
- CMD_ECHO_MAX
- }CMD_ECHO;
- #ifndef _Packet_Cmd
- typedef enum _Packet_Cmd {
- PACKET_CMD_NONE = -1,
- PACKET_CMD_OPEN,
- PACKET_CMD_CLOSE,
- PACKET_CMD_GET,
- PACKET_CMD_UPDATE,//更新对象
- PACKET_CMD_ADD,
- PACKET_CMD_DEL,
- PACKET_CMD_EXE,
- PACKET_CMD_DATA,
- PACKET_CMD_MSG,
- PACKET_CMD_ONLINE,//设备掉线后重新注册到Root
- PACKET_CMD_PART_UPDATE,//只更新对象的子节点
- PACKET_CMD_SET,
- PACKET_CMD_MAX
- }PACKET_CMD;
- #endif
- const string _Packet_Cmd_String[] = {
- "Open",
- "Close",
- "Get",
- "Update",
- "Add",
- "Del",
- "Action",
- "Data",
- "Message",
- "Online",
- "PartUpdate",
- "Set"
- };
- typedef enum _Packet_Type {
- PACKET_TYPE_NONE = -1,
- PACKET_TYPE_REQ,
- PACKET_TYPE_RES,
- PACKET_TYPE_NOTIFY,
- PACKET_TYPE_MAX
- }PACKET_TYPE;
- typedef enum _Dios_File_Flags {
- IMAGE_FH = 1,
- ACTION = 2,
- NOTIFY_MSG = 4,
- NOTIFY_UPDATE = 8,
- NOTIFY_DATA = 16,
- NOTIFY_ACTION = 32,
- ALL_ACCESS = 64 - 1,
- ABSCRACT_ONLINE = 128
- }DIOS_FILE_FLAGS;
- typedef enum _Action_Sync_Mode {
- ACTION_SYNC,
- ACTION_ASYNC,
- }ACTION_SYNC_MODE;
- #define DIOS_PACK_IDX ("IDX")
- #define DIOS_PACK_TYPE ("TYPE")
- #define DIOS_PACK_TYPE_REQ ("REQUEST")
- #define DIOS_PACK_TYPE_RES ("RESPONSE")
- #define DIOS_PACK_TYPE_NOTIFY ("NOTIFY")
- #define DIOS_PACK_CMD ("CMD")
- //#define DIOS_PACK_CMD_GET ("GET")
- //#define DIOS_PACK_CMD_UPDATE ("UPDATE")
- //#define DIOS_PACK_CMD_ADD ("ADD")
- //#define DIOS_PACK_CMD_DEL ("DEL")
- //#define DIOS_PACK_CMD_EXE ("EXE")
- //#define DIOS_PACK_CMD_DATA ("DATA")
- //#define DIOS_PACK_CMD_OPEN ("OPEN")
- //#define DIOS_PACK_CMD_CLOSE ("CLOSE")
- #define DIOS_PACKET_SYNC ("SYNC")
- #define DIOS_PACK_HANDLE ("HANDLE")
- #define DIOS_PACK_HANDLE_ROUTE ("ROUTE")
- #define DIOS_PACK_HANDLE_FLAGS ("FLAGS")
- #define DIOS_PACK_HANDLE_LANG ("LANG")
- #define DIOS_PACKET_HANDLE_KEY ("HANDLEID")
- #define DIOS_PACK_HANDLE_OWNERID ("OWNERID")
- #define DIOS_PACK_HANDLE_DEVID ("DEVID")
- #define DIOS_PACK_TARGET_BUSID ("EBUSID")
- #define DIOS_PACK_TARGET_MACHINEID ("MACHINEID")
- #define DIOS_PACK_TARGET_PROCID ("PROCID")
- #define DIOS_PACK_TARGET_ADDR ("ADDR")
- #define DIOS_PACK_KEY ("KEY")
- #define DIOS_PACK_ACTION ("Action")
- #define DIOS_PACK_CONTEXT ("CONTEXT")
- #define DIOS_PACK_RETURN ("RET")
- #define DIOS_PACK_CODE ("CODE")
- #define DIOS_PACK_MSG ("MSG")
- #define DIOS_PACKET_VER ("Ver")
- #define DIOS_PACKET_VER_NOW ("3")
- #define DIOS_TOPIC ("TOPIC")
- #define DIOS_PUBLISH ("PUBLISH")
- #define DIOS_RESP_TOPIC ("RespTopic")
- #define DIOS_TRANSACTION ("Transaction")
- #define DIOS_CLIENT_ROOT_TOPIC ("DIOS/CLIENT/PLATFORM")
- #define DIOS_CLIENT_ID_PREFIX ("DIOS_CLIENT_")
- //因为路由要发往Local or Eth,
- //OPEN命令除了TargetBusID以外,没有其他信息,导致无法确定是发给哪个方向.
- //所以额外添加此ROUTE Flag到文件句柄中
- //这个选项只在内部跟不同Channel通信的时候用,应用的Client应该缺省就是Any.
- //框架层截断应用层的包,并由框架层分析并判断发给谁.
- //any:路由方向是先发往本地,如果本地无目的地,再次发往Eth.
- //Local:路由方向就是本地,同理,Req&Res&Notify应该都是本地.
- //Eth:路由方向就是远程机器,其他同上.
- typedef enum _Dios_Packet_Route {
- DIOS_PACKET_ROUTE_NOTARGET = -1,//can't send
- DIOS_PACKET_ROUTE_ANY,//to any possible direction
- DIOS_PACKET_ROUTE_LOCAL,//only local machine
- DIOS_PACKET_ROUTE_ETH,//only remote machine
- DIOS_PACKET_ROUTE_MAX
- }DIOS_PACKET_ROUTE;
- class DIOSFILEHANDLE_API DiosTargetAddress {
- string *m_pKey;
- string *m_ValString;
- ResDataObject * m_pTargetObject;
- public:
- DiosTargetAddress(void);
- DiosTargetAddress(const DiosTargetAddress &tValue);
- virtual ~DiosTargetAddress(void);
- virtual const char *GetVal();
- bool operator ==(const DiosTargetAddress &target);
- DiosTargetAddress& operator = (const DiosTargetAddress &tValue);
- void GetResDataObject(ResDataObject &obj);
- bool SetResDataObject(ResDataObject &obj);
- virtual bool SetVal(const char* pValString);
- void SetKey(const char *pKey);
- const char *GetKey();
- ResDataObject &operator [](const char *pKey);
- void PrintOut();//for test
- };
- class DIOSFILEHANDLE_API DiosDevFileHandle {
- string *m_pKey;
- string *m_ValString;
- ResDataObject *m_pRoute;//0:any,1:local,2:eth
- ResDataObject *m_pFlags;
- ResDataObject *m_pLang;
- ResDataObject *m_pHandleId;
- DiosTargetAddress *m_pOwner;
- DiosTargetAddress *m_pDev;
- public:
- DiosDevFileHandle(void);
- DiosDevFileHandle(const DiosDevFileHandle &tValue);
- virtual ~DiosDevFileHandle(void);
- void SetKey(const char *pKey);
- const char *GetKey();
- void GetResDataObject(ResDataObject &obj);
- bool SetResDataObject(ResDataObject &obj);
- virtual const char *GetVal();
- virtual bool SetVal(const char* pValString);
- DiosTargetAddress &GetTarget(bool Owner = true);
- DiosDevFileHandle& operator = (const DiosDevFileHandle &tValue);
- ResDataObject &operator [](const char *pKey);
- bool operator ==(const DiosDevFileHandle &target);
- void PrintOut();//for test
- };
|