#pragma once #include "SpAsyncWait.h" class SpClientSessionFunction : public IClientSessionFunction, public SpAsyncWait { public: SpClientSessionFunction(SpEntity *pEntity, CClientSessionBase *pClientSessionBase, const char *pszRemoteEntity); virtual ~SpClientSessionFunction(); //SpAsyncWait virtual ErrorCodeEnum Begin(const char *pszParam); virtual ErrorCodeEnum Close(); virtual void OnAnswerWaited(ErrorCodeEnum Error); //IClientSessionFunction virtual ErrorCodeEnum OnewayCall(DWORD dwMessageID, DWORD dwMessageSignature, CAutoBuffer Buffer); virtual ErrorCodeEnum OnewayCall(DWORD dwMessageID, DWORD dwMessageSignature); virtual ErrorCodeEnum OnewayCall(DWORD dwMessageID, DWORD dwMessageSignature, CAutoBuffer Buffer, linkContext& pContext); virtual ErrorCodeEnum OnewayCall(DWORD dwMessageID, DWORD dwMessageSignature, linkContext& pContext); virtual ErrorCodeEnum AsyncRequest(DWORD dwMessageID, DWORD dwMessageSignature, CAutoBuffer Buffer, CSmartPointer &pAsynWaitSp, DWORD dwTimeOut, DWORD dwReqId); virtual ErrorCodeEnum AsyncRequest(DWORD dwMessageID, DWORD dwMessageSignature, CSmartPointer &pAsynWaitSp, DWORD dwTimeOut, DWORD dwReqId); virtual ErrorCodeEnum AsyncRequest(DWORD dwMessageID, DWORD dwMessageSignature, CAutoBuffer Buffer, CSmartPointer& pAsynWaitSp, linkContext& pContext, DWORD dwTimeOut, DWORD dwReqId); virtual ErrorCodeEnum AsyncRequest(DWORD dwMessageID, DWORD dwMessageSignature, CSmartPointer& pAsynWaitSp, linkContext& pContext, DWORD dwTimeOut, DWORD dwReqId); virtual SessionStateEnum GetCurrentState(); virtual ErrorCodeEnum CloseSession(); virtual const char *GetRemoteEntityName(); static void __on_connect(sp_ses_uac_t *uac, int error, void *user_data); static void __on_close(sp_ses_uac_t *uac, int error, void *user_data); static void __on_destroy(sp_ses_uac_t *uac, void *user_data); void on_connect(int error); void on_close(int error); void on_destroy(); bool isVaildPointer(); private: SpEntity *m_pEntity; CClientSessionBase *m_pClientSessionBase; sp_ses_uac_t *m_uac; int m_local_seq; long long m_value; //judge the wild pointer };