SpTransactionContext.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #ifndef _SP_TRANSACTION_CONTEXT_H__
  2. #define _SP_TRANSACTION_CONTEXT_H__
  3. #pragma once
  4. #include "SpBase.h"
  5. #include "sp_ses.h"
  6. class SpEntity;
  7. class SpTransactionContext : public ITransactionContext
  8. {
  9. public:
  10. SpTransactionContext(sp_ses_uas_t *uas, int info, int method_id, int method_sig, int expire_time, iobuffer_t **p_pkt, int tsx_id);
  11. virtual ~SpTransactionContext();
  12. virtual bool IsOneWayCall();
  13. virtual DWORD GetRequestID();
  14. virtual ErrorCodeEnum GetReceiveBuffer(DWORD &dwMessageID, DWORD &dwMessageSignature, CAutoBuffer &Buffer);
  15. virtual ErrorCodeEnum SendAnswer(CAutoBuffer Buffer, bool bEnd=true);
  16. virtual ErrorCodeEnum SendAnswer(ErrorCodeEnum eErrorCode, DWORD dwUserError = 0, CSimpleString str = "");
  17. virtual ErrorCodeEnum SetExpireTime(DWORD dwMS);
  18. virtual ErrorCodeEnum GetExpireTime(DWORD &dwWholeTime,DWORD &dwLeftTime);
  19. DWORD GetExpireLeftTime();
  20. virtual ErrorCodeEnum GetLinkContext(linkContext& curLink);
  21. private:
  22. int m_info;
  23. int m_method_id;
  24. int m_method_sig;
  25. int m_expire_time;
  26. int m_timeout;
  27. iobuffer_t *m_pkt;
  28. sp_tsx_uas_t *m_tsx;
  29. };
  30. // for OnPreStart, OnPrePause, OnPreContinue, OnPreClose
  31. class SpMUITransactionContext : public ITransactionContext
  32. {
  33. public:
  34. enum {
  35. OP_START,
  36. OP_PAUSE,
  37. OP_SELFTEST,
  38. OP_CLOSE,
  39. OP_CONTINUE,
  40. OP_MOCK
  41. };
  42. SpMUITransactionContext(SpEntity *pEntity, int op) : m_pEntity(pEntity), m_op(op) {}
  43. virtual ~SpMUITransactionContext(){};
  44. virtual bool IsOneWayCall() { return false; }
  45. virtual DWORD GetRequestID() { return 0; }
  46. virtual ErrorCodeEnum GetReceiveBuffer(DWORD &dwMessageID, DWORD &dwMessageSignature, CAutoBuffer &Buffer) { return Error_NotImpl; }
  47. virtual ErrorCodeEnum SendAnswer(CAutoBuffer Buffer, bool bEnd=true) { return Error_NotInit; }
  48. virtual ErrorCodeEnum SendAnswer(ErrorCodeEnum eErrorCode, DWORD dwUserError = 0, CSimpleString str = "");
  49. virtual ErrorCodeEnum SetExpireTime(DWORD dwMS) { return Error_NotImpl; }
  50. virtual ErrorCodeEnum GetExpireTime(DWORD &dwWholeTime,DWORD &dwLeftTime) { return Error_NotImpl; }
  51. ErrorCodeEnum GetLinkContext(linkContext& curLink){ return Error_NotImpl; }
  52. private:
  53. SpEntity *m_pEntity;
  54. int m_op;
  55. };
  56. /*!
  57. * @class SpMockTransactionContext
  58. * @brief the class used to simulate the communication between entities
  59. * @note the input param SpEntity* would be nullptr, and we do not need it at current time.
  60. */
  61. class SpMockTransactionContext : public SpMUITransactionContext
  62. {
  63. public:
  64. SpMockTransactionContext(SpEntity* unused)
  65. :SpMUITransactionContext(unused, SpMUITransactionContext::OP_MOCK)
  66. ,m_lastErrorCode(Error_IgnoreAll),m_dwLastUserCode(0)
  67. {}
  68. virtual ~SpMockTransactionContext() {};
  69. virtual ErrorCodeEnum SendAnswer(ErrorCodeEnum eErrorCode, DWORD dwUserError = 0, CSimpleString str = "")
  70. {
  71. m_lastErrorCode = eErrorCode;
  72. m_dwLastUserCode = dwUserError;
  73. return Error_Succeed;
  74. }
  75. ErrorCodeEnum GetExpireTime(DWORD& dwWholeTime, DWORD& dwLeftTime)
  76. {
  77. ErrorCodeEnum lastErrorCode = m_lastErrorCode;
  78. dwWholeTime = m_dwLastUserCode;
  79. /** Because the TestCase mechanism use SpMockTransactionContext as singleton instance
  80. * So we have to reset it. [5/19/2020 Gifur] */
  81. m_lastErrorCode = Error_IgnoreAll;
  82. return lastErrorCode;
  83. }
  84. ErrorCodeEnum SendAnswer(CAutoBuffer Buffer, bool bEnd = true)
  85. {
  86. return SendAnswer(Error_Succeed, 0);
  87. }
  88. private:
  89. ErrorCodeEnum m_lastErrorCode;
  90. DWORD m_dwLastUserCode;
  91. };
  92. #endif //_SP_TRANSACTION_CONTEXT_H__