`

[设计模式][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;
};


分享到:
评论

相关推荐

    设计模式C++学习之命令模式(Command)

    命令模式是一种行为设计模式,它将请求封装为一个对象,使得可以使用不同的请求、队列或者日志请求,也可以支持可撤销的操作。在C++中,命令模式的应用可以帮助我们更好地组织代码,提高代码的可扩展性和可维护性。...

    Head First 设计模式 (六) 命令模式(Command pattern) C++实现

    在Head First 设计模式这本书中,第六章详细介绍了如何在C++中实现命令模式。 命令模式的核心思想是将"做什么"与"谁去做"分离开来。命令对象持有接收者并调用其特定方法,而调用者只关心命令对象,而不关心具体的...

    深入浅出设计模式 C++ 源码 + 设计模式 C++

    本资料包包含“深入浅出设计模式 C++”的源码和相关教材,旨在帮助开发者理解和应用设计模式。 一、设计模式的重要性 设计模式不仅提供了可重用的代码结构,还促进了团队间的沟通和代码的可维护性。它们是经验丰富...

    command 模式的c++实现

    命令模式是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列或者日志请求,也可以支持可撤销的操作。在C++中实现命令模式,可以有效地解耦调用者和接收者,使系统更加灵活和易于维护。 #...

    设计模式C++版(pdf版)

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是软件工程领域中一个极为重要的概念,它代表着一系列被广泛接受的解决特定问题的方法。GoF(Gang of Four)所提出的23种设计模式更是...

    设计模式-command

    命令模式是一种行为设计模式,它的主要目的是将命令的发送者与接收者解耦。在“设计模式-command”中,我们看到这个模式的应用,通过将一个操作封装为一个对象(即命令对象),使得发送者可以无需知道接收者的具体...

    C++设计模式代码资源23_Command_命令模式.zip

    **C++设计模式:命令模式** 命令模式是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列或者记录请求日志,同时支持可撤销的操作。在C++编程中,命令模式是一种非常实用的设计模式,能够...

    c++-设计模式之命令模式(Command Pattern)

    命令模式(Command Pattern)是一种行为型设计模式,它将请求封装为对象,从而使您可以使用不同的请求、队列请求或日志请求,并支持可撤销操作。命令模式通常用于实现操作的解耦,使得发送者和接收者之间不直接关联...

    C++设计模式课件23_Command_命令模式.pdf

    ### C++设计模式之命令模式解析 #### 一、引言 在软件开发过程中,设计模式作为一套被广泛接受的解决方案,为解决特定问题提供了一种标准化的方法。本篇文章将聚焦于C++设计模式中的“命令模式”,通过深入剖析其...

    23个设计模式C++代码.rar

    这个压缩包“23个设计模式C++代码.rar”包含了对设计模式的C++实现,是学习和理解设计模式的宝贵资源。 首先,我们来看一下三个主要类别:结构型、创建型和行为型设计模式。 1. **结构型设计模式**关注如何组织类...

    23种设计模式(C++).pdf

    设计模式是面向对象编程领域中,解决特定问题的一般性方案。它们由四人组(Gang of Four,简称GoF)在1994年的《设计模式:可复用面向对象软件的基础》一书中提出。设计模式分为创建型、结构型和行为型三类,总共...

    设计模式专题之(十四)命令模式---设计模式命令模式示例代码(python--c++)

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在本专题中,我们将深入探讨命令模式,并通过Python和C++两种...

    命令模式 C++ 实现

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在C++中,我们可以利用面向对象的特性来有效地实现这个模式。 ...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...

    C++设计模式.pdf

    从给定的文件信息来看,该文档主要涵盖了GoF(Gang of Four)提出的23种设计模式的详细解析,并附带了C++语言的实现源码。设计模式是在软件工程领域内,针对常见问题的一套经过验证的解决方案,它们为解决特定类型的...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 命令模式(Command):将请求封装为一个对象,以便使用不同的请求、队列请求、或者支持可撤销的操作。 - 解释器模式(Interpreter):给定一种语言,定义它的文法表示,并提供一个解释器来处理这种语言中的句子...

    C++设计模式(Design Pattern)范例源代码

    命令模式(Command) 解释器模式(Interpreter) 迭代器模式(Iterator) 中介者模式(Mediator) 备忘录模式(Memento) 观察者模式(Observer) 状态模式(State) 策略模式(Strategy) 模板方法模式(Template Method) 访问者模式...

Global site tag (gtag.js) - Google Analytics