123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- #ifndef _SP_TRANSACTION_CONTEXT_H__
- #define _SP_TRANSACTION_CONTEXT_H__
- #pragma once
- #include "SpBase.h"
- #include "sp_ses.h"
- class SpEntity;
- class SpTransactionContext : public ITransactionContext
- {
- public:
- SpTransactionContext(sp_ses_uas_t *uas, int info, int method_id, int method_sig, int expire_time, iobuffer_t **p_pkt, int tsx_id);
- virtual ~SpTransactionContext();
- virtual bool IsOneWayCall();
- virtual DWORD GetRequestID();
- virtual ErrorCodeEnum GetReceiveBuffer(DWORD &dwMessageID, DWORD &dwMessageSignature, CAutoBuffer &Buffer);
- virtual ErrorCodeEnum SendAnswer(CAutoBuffer Buffer, bool bEnd=true);
- virtual ErrorCodeEnum SendAnswer(ErrorCodeEnum eErrorCode, DWORD dwUserError = 0, CSimpleString str = "");
- virtual ErrorCodeEnum SetExpireTime(DWORD dwMS);
- virtual ErrorCodeEnum GetExpireTime(DWORD &dwWholeTime,DWORD &dwLeftTime);
- DWORD GetExpireLeftTime();
- virtual ErrorCodeEnum GetLinkContext(linkContext& curLink);
- private:
- int m_info;
- int m_method_id;
- int m_method_sig;
- int m_expire_time;
- int m_timeout;
- iobuffer_t *m_pkt;
- sp_tsx_uas_t *m_tsx;
- };
- // for OnPreStart, OnPrePause, OnPreContinue, OnPreClose
- class SpMUITransactionContext : public ITransactionContext
- {
- public:
- enum {
- OP_START,
- OP_PAUSE,
- OP_SELFTEST,
- OP_CLOSE,
- OP_CONTINUE,
- OP_MOCK
- };
- SpMUITransactionContext(SpEntity *pEntity, int op) : m_pEntity(pEntity), m_op(op) {}
- virtual ~SpMUITransactionContext(){};
- virtual bool IsOneWayCall() { return false; }
- virtual DWORD GetRequestID() { return 0; }
- virtual ErrorCodeEnum GetReceiveBuffer(DWORD &dwMessageID, DWORD &dwMessageSignature, CAutoBuffer &Buffer) { return Error_NotImpl; }
- virtual ErrorCodeEnum SendAnswer(CAutoBuffer Buffer, bool bEnd=true) { return Error_NotInit; }
- virtual ErrorCodeEnum SendAnswer(ErrorCodeEnum eErrorCode, DWORD dwUserError = 0, CSimpleString str = "");
- virtual ErrorCodeEnum SetExpireTime(DWORD dwMS) { return Error_NotImpl; }
- virtual ErrorCodeEnum GetExpireTime(DWORD &dwWholeTime,DWORD &dwLeftTime) { return Error_NotImpl; }
- ErrorCodeEnum GetLinkContext(linkContext& curLink){ return Error_NotImpl; }
- private:
- SpEntity *m_pEntity;
- int m_op;
- };
- /*!
- * @class SpMockTransactionContext
- * @brief the class used to simulate the communication between entities
- * @note the input param SpEntity* would be nullptr, and we do not need it at current time.
- */
- class SpMockTransactionContext : public SpMUITransactionContext
- {
- public:
- SpMockTransactionContext(SpEntity* unused)
- :SpMUITransactionContext(unused, SpMUITransactionContext::OP_MOCK)
- ,m_lastErrorCode(Error_IgnoreAll),m_dwLastUserCode(0)
- {}
- virtual ~SpMockTransactionContext() {};
- virtual ErrorCodeEnum SendAnswer(ErrorCodeEnum eErrorCode, DWORD dwUserError = 0, CSimpleString str = "")
- {
- m_lastErrorCode = eErrorCode;
- m_dwLastUserCode = dwUserError;
- return Error_Succeed;
- }
- ErrorCodeEnum GetExpireTime(DWORD& dwWholeTime, DWORD& dwLeftTime)
- {
- ErrorCodeEnum lastErrorCode = m_lastErrorCode;
- dwWholeTime = m_dwLastUserCode;
- /** Because the TestCase mechanism use SpMockTransactionContext as singleton instance
- * So we have to reset it. [5/19/2020 Gifur] */
- m_lastErrorCode = Error_IgnoreAll;
- return lastErrorCode;
- }
- ErrorCodeEnum SendAnswer(CAutoBuffer Buffer, bool bEnd = true)
- {
- return SendAnswer(Error_Succeed, 0);
- }
- private:
- ErrorCodeEnum m_lastErrorCode;
- DWORD m_dwLastUserCode;
- };
- #endif //_SP_TRANSACTION_CONTEXT_H__
|