`

[设计模式][c++] 命令模式(command)

 
阅读更多
class Command : public eastl::intrusive_list_node
{
    NON_COPYABLE(Command)

public:
    Command(const Message* message);
    virtual ~Command();

	BlazeRpcError run();

    virtual ComponentId getComponentId() const { return mFrame.componentId; }
    virtual uint16_t getCommandId() const { return mFrame.commandId; }
    void setFiberContextName(const char *context) { mFiberContextName = context; }

    uint32_t getMsgNum() const { return mFrame.msgNum; }

    BlazeRpcError getError() const { return mError; }
    virtual Tdf *getResponse() { return NULL; }
    virtual Tdf *getErrorResponse() { return NULL; }

    SessionId getSessionId() const { return mSessionId; }
    UserSessionId getUserSessionId() const { return mUserSessionId; }
    InboundRpcConnection *getConnection() const { return mConnection; }
    uint32_t getConnectionUserIndex() const { return mConnectionUserIndex; }
 
	bool isDestroyPending() const { return mDestroyPending; }
    bool isRegistered() const { return mpNext != NULL && mpPrev != NULL; }
    bool isOnCurrentFiber() const { return mFiber == gCurrentFiber; }
        
    void setMetrics(CommandMetrics* metrics) { mMetrics = metrics; }
    void updateMetrics();

    void sendRpcResponse();
    
    void deregisterCommand();
    void cancel(BlazeRpcError reason);

    const Fiber* getFiber() {return mFiber;}
    
protected:
    void registerCommand(UserSession& userSession);
    bool isRpcCall() const { return mIsRpc; }
    uint32_t getContext() const { return mFrame.context; }
    virtual Fiber* createFiber() const; 
    virtual void destroy();
    
    BlazeRpcError mError;

private:
    virtual void executeWrapper() = 0;
    void exceptionHandler(Fiber&);
    
    TimeValue mStartTime;
    CommandMetrics* mMetrics;
	Fiber *mFiber;
    const char *mFiberContextName;
    SessionId mSessionId;
    SessionId mUserSessionId;
    InboundRpcConnection *mConnection;
    uint32_t mConnectionUserIndex;
    RpcProtocol::Frame mFrame;
    bool mIsRpc;
    bool mDestroyPending; 
    bool mIsCanceled;
};


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics