EventArgs.BUS.hpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #pragma once
  2. #include "DelegateArg.hpp"
  3. #include "WString.hpp"
  4. #ifndef _DELEGATEARG_DLL
  5. #define DELEGATEARG_API _declspec(dllimport)
  6. #else
  7. #define DELEGATEARG_API _declspec(dllexport)
  8. #endif
  9. #pragma warning (disable : 4275)
  10. //-----------------------------------------------------------------------------
  11. // A general DelegateArg of BUSMessage
  12. //-----------------------------------------------------------------------------
  13. class DELEGATEARG_API EventArgs_BUSMessage : public DelegateArgs
  14. {
  15. typedef DelegateArgs inherited;
  16. DECLARE_RTTI (EventArgs_BUSMessage)
  17. public:
  18. inline EventArgs_BUSMessage (DWORD Command, DString SourceID, DString TargetID, DString Message, WString WMessage, DWORD MsgID)
  19. {
  20. m_SourceID = SourceID;
  21. m_TargetID = TargetID;
  22. m_Message = Message;
  23. m_WMessage = WMessage;
  24. m_Command = Command;
  25. m_ErrorCode = 0; // 0 -- 没有错误
  26. m_MessageID = MsgID;
  27. }
  28. inline EventArgs_BUSMessage (const EventArgs_BUSMessage & From)
  29. {
  30. m_SourceID = From.m_SourceID;
  31. m_TargetID = From.m_TargetID;
  32. m_Message = From.m_Message;
  33. m_WMessage = From.m_WMessage;
  34. m_Command = From.m_Command;
  35. m_ErrorCode = 0; // 0 -- 没有错误
  36. m_MessageID = From.m_MessageID;
  37. }
  38. public:
  39. template <typename T> T MsgAs () const { }
  40. template <> DString MsgAs () const { if (m_Message.GetLength () > 0) return m_Message; return m_WMessage.ToDString (); }
  41. template <> WString MsgAs () const { if (m_WMessage.GetLength () > 0) return m_WMessage; return WString (m_Message); }
  42. template <typename T> T AckAs () const { }
  43. template <> DString AckAs () const { if (m_AckMessage.GetLength () > 0) return m_AckMessage; return m_WAckMessage.ToDString (); }
  44. template <> WString AckAs () const { if (m_WAckMessage.GetLength () > 0) return m_WAckMessage; return WString (m_AckMessage); }
  45. template <typename T> T & GetAck () { }
  46. template <> DString & GetAck () { return m_AckMessage; }
  47. template <> WString & GetAck () { return m_WAckMessage; }
  48. void SetAck (DString & ACK) { m_AckMessage = ACK; }
  49. void SetAck (WString & ACK) { m_WAckMessage = ACK; }
  50. // 强制修改 Message
  51. // 目前在 CSBUSClient 中使用
  52. void ForceSetMessage (DString & Msg)
  53. {
  54. if (m_Message.GetLength () > 0)
  55. m_Message = Msg;
  56. else
  57. m_WMessage = Msg;
  58. }
  59. void ForceSetMessage (WString & Msg)
  60. {
  61. if (m_WMessage.GetLength () > 0)
  62. m_WMessage = Msg;
  63. else
  64. m_Message = Msg.ToDString ();
  65. }
  66. public:
  67. DString m_SourceID;
  68. DString m_TargetID;
  69. DWORD m_Command;
  70. DWORD m_ErrorCode; // 由被调用者赋值, 表示错误代号
  71. DWORD m_MessageID; // 来自总线内部的 MessageID, 用于跟踪
  72. protected:
  73. DString m_Message;
  74. DString m_AckMessage;
  75. WString m_WMessage;
  76. WString m_WAckMessage;
  77. };
  78. //-----------------------------------------------------------------------------
  79. // A general DelegateArg of BUSBLOB
  80. //-----------------------------------------------------------------------------
  81. #include "TmplBlockBuffer.tlh"
  82. #include "TmplBlockBuffer.tli"
  83. class DELEGATEARG_API EventArgs_BUSBLOB : public EventArgs_BUSMessage
  84. {
  85. typedef EventArgs_BUSMessage inherited;
  86. DECLARE_RTTI (EventArgs_BUSBLOB)
  87. public:
  88. inline EventArgs_BUSBLOB (DWORD Command, DString SourceID, DString TargetID, DString Message, WString WMessage, DWORD MsgID, BlockBuffer BLOB)
  89. : EventArgs_BUSMessage (Command, SourceID, TargetID, Message, WMessage, MsgID)
  90. {
  91. m_BLOB = BLOB;
  92. }
  93. public:
  94. BlockBuffer m_BLOB;
  95. BlockBuffer m_AckBLOB;
  96. };