SIGN IN SIGN UP
TarsCloud / Tars UNCLAIMED

Tars is a high-performance RPC framework based on name service and Tars protocol, also integrated administration platform, and implemented hosting-service via flexible schedule.

0 0 5 C++
2017-01-18 16:19:06 +08:00
/**
* 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<StatExChange> 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