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)
猜你喜欢
转载自jacky-dai.iteye.com/blog/1134659
今日推荐
周排行