/** * Tencent is pleased to support the open source community by making Tars available. * * Copyright (C) 2016THL A29 Limited, a Tencent company. All rights reserved. * * Licensed under the BSD 3-Clause License (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * https://opensource.org/licenses/BSD-3-Clause * * Unless required by applicable law or agreed to in writing, software distributed * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ #ifndef __SERVER_COMMAND_H_ #define __SERVER_COMMAND_H_ #include "ServerObject.h" #include "NodeServer.h" class StatExChange; typedef TC_AutoPtr StatExChangePtr; class ServerCommand : public TC_HandleBase { public: enum ExeStatus { EXECUTABLE, //可以运行 DIS_EXECUTABLE, //不可以运行 NO_NEED_EXECUTE //不需要运行 }; public: virtual ~ServerCommand(){} virtual ExeStatus canExecute(string &sResult){ return EXECUTABLE;} virtual int execute(string &sResult) = 0; virtual int doProcess() { string s ; return doProcess(s); } virtual int doProcess(string &sResult) { ExeStatus t = canExecute(sResult); if(t == DIS_EXECUTABLE) { return -1; } else if(t == NO_NEED_EXECUTE) { return 0; } return execute(sResult); } virtual int doProcess(const TarsCurrentPtr current,string &sResult, bool bValid=true) { if( bValid && g_app.isValid(current->getIp()) == false ) { sResult = " erro:ip "+ current->getIp()+" is invalid"; return -1; } return doProcess(sResult); } }; class StatExChange : public TC_HandleBase { public: /** * 构造函数 * @param pServerObjectPtr ServerObject指针 * @param eState1 状态1,构造时设置pServerObjectPtr 状态为state1 * @param eState2 状态2,析构时设置pServerObjectPtr 状态为state2 */ StatExChange( const ServerObjectPtr& pServerObjectPtr, ServerObject::InternalServerState eState1, ServerObject::InternalServerState eState2 ) { _serverObjectPtr = pServerObjectPtr; _state1 = eState1; _state2 = eState2; _serverObjectPtr->setState( _state1 ); } /** * 析够 */ ~StatExChange() { _serverObjectPtr->setState( _state2 ); } private: ServerObject::InternalServerState _state1; ServerObject::InternalServerState _state2; ServerObjectPtr _serverObjectPtr; }; #endif