mirror of
https://gitee.com/TarsCloud/TarsCpp.git
synced 2024-12-22 22:16:38 +08:00
add examples CMakeLists.txt
This commit is contained in:
parent
fedd9f4a71
commit
17df5bba83
@ -114,11 +114,15 @@ IF(WIN32)
|
|||||||
include_directories(${CMAKE_SOURCE_DIR}/util/src/epoll_windows)
|
include_directories(${CMAKE_SOURCE_DIR}/util/src/epoll_windows)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
include("${CMAKE_SOURCE_DIR}/cmake/BuildTarsServer.cmake")
|
||||||
|
|
||||||
|
include_directories(${CMAKE_SOURCE_DIR}/util/include)
|
||||||
|
include_directories(${CMAKE_SOURCE_DIR}/servant)
|
||||||
|
include_directories(${CMAKE_SOURCE_DIR}/servant/protocol)
|
||||||
|
|
||||||
add_subdirectory(util)
|
add_subdirectory(util)
|
||||||
add_subdirectory(tools)
|
add_subdirectory(tools)
|
||||||
|
|
||||||
# set(TARS2CPP "${tools_BINARY_DIR}/tars2cpp/tars2cpp")
|
|
||||||
|
|
||||||
add_subdirectory(servant)
|
add_subdirectory(servant)
|
||||||
|
add_subdirectory(examples)
|
||||||
|
|
||||||
#add_subdirectory(test_deprecated)
|
#add_subdirectory(test_deprecated)
|
57
cmake/BuildTarsServer.cmake
Normal file
57
cmake/BuildTarsServer.cmake
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
|
||||||
|
macro(build_tars_server MODULE)
|
||||||
|
|
||||||
|
include_directories(./)
|
||||||
|
|
||||||
|
aux_source_directory(. DIR_SRCS)
|
||||||
|
|
||||||
|
# message("MODULE: ${MODULE}, DIR_SRCS:${DIR_SRCS}")
|
||||||
|
|
||||||
|
FILE(GLOB TARS_LIST "${CMAKE_CURRENT_SOURCE_DIR}/*.tars")
|
||||||
|
|
||||||
|
# message("TARS_LIST:${TARS_LIST}")
|
||||||
|
|
||||||
|
set(TARS_LIST_DEPENDS)
|
||||||
|
|
||||||
|
if (TARS_LIST)
|
||||||
|
set(CLEAN_LIST)
|
||||||
|
|
||||||
|
foreach (TARS_SRC ${TARS_LIST})
|
||||||
|
get_filename_component(NAME_WE ${TARS_SRC} NAME_WE)
|
||||||
|
|
||||||
|
set(TARS_H ${NAME_WE}.h)
|
||||||
|
|
||||||
|
set(CUR_TARS_GEN ${CMAKE_CURRENT_SOURCE_DIR}/${TARS_H})
|
||||||
|
LIST(APPEND TARS_LIST_DEPENDS ${CUR_TARS_GEN})
|
||||||
|
|
||||||
|
# message("TARS_H:${CMAKE_CURRENT_SOURCE_DIR}/${TARS_H}")
|
||||||
|
|
||||||
|
add_custom_command(OUTPUT ${CUR_TARS_GEN}
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
DEPENDS ${TARS2CPP}
|
||||||
|
COMMAND ${TARS2CPP} ${TARS_SRC}
|
||||||
|
COMMENT "${TARS2CPP} ${TARS_SRC}")
|
||||||
|
|
||||||
|
list(APPEND CLEAN_LIST ${CMAKE_CURRENT_SOURCE_DIR}/${TARS_H})
|
||||||
|
|
||||||
|
endforeach ()
|
||||||
|
|
||||||
|
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CLEAN_LIST}")
|
||||||
|
|
||||||
|
set(TARS_TARGET "TARS_${MODULE}")
|
||||||
|
add_custom_target(${TARS_TARGET} ALL DEPENDS ${TARS_LIST_DEPENDS})
|
||||||
|
|
||||||
|
add_executable(${MODULE} ${DIR_SRCS})
|
||||||
|
|
||||||
|
add_dependencies(${MODULE} ${TARS_TARGET})
|
||||||
|
|
||||||
|
else(TARS_LIST)
|
||||||
|
add_executable(${MODULE} ${DIR_SRCS})
|
||||||
|
|
||||||
|
endif (TARS_LIST)
|
||||||
|
|
||||||
|
add_dependencies(${MODULE} tarsutil tarsservant)
|
||||||
|
|
||||||
|
target_link_libraries(${MODULE} tarsutil tarsservant)
|
||||||
|
|
||||||
|
endmacro()
|
1
examples/CoroutineDemo/AServer/CMakeLists.txt
Normal file
1
examples/CoroutineDemo/AServer/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("AServer")
|
1
examples/CoroutineDemo/BServer/CMakeLists.txt
Normal file
1
examples/CoroutineDemo/BServer/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("BServer")
|
7
examples/CoroutineDemo/CMakeLists.txt
Normal file
7
examples/CoroutineDemo/CMakeLists.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
add_subdirectory(AServer)
|
||||||
|
add_subdirectory(BServer)
|
||||||
|
add_subdirectory(client)
|
||||||
|
add_subdirectory(testCoro)
|
||||||
|
add_subdirectory(testParallelCoro)
|
||||||
|
|
1
examples/CoroutineDemo/client/CMakeLists.txt
Normal file
1
examples/CoroutineDemo/client/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("client")
|
@ -129,7 +129,7 @@ int main(int argc,char ** argv)
|
|||||||
cout << "********************" <<endl;
|
cout << "********************" <<endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
tp.wait();
|
tp.waitForAllDone();
|
||||||
}
|
}
|
||||||
catch(exception &e)
|
catch(exception &e)
|
||||||
{
|
{
|
||||||
|
1
examples/CoroutineDemo/testCoro/CMakeLists.txt
Normal file
1
examples/CoroutineDemo/testCoro/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("testCoro")
|
1
examples/CoroutineDemo/testParallelCoro/CMakeLists.txt
Normal file
1
examples/CoroutineDemo/testParallelCoro/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("testParallelCoro")
|
@ -57,133 +57,133 @@ public:
|
|||||||
};
|
};
|
||||||
typedef tars::TC_AutoPtr<BServantCoroCallback> BServantCoroCallbackPtr;
|
typedef tars::TC_AutoPtr<BServantCoroCallback> BServantCoroCallbackPtr;
|
||||||
|
|
||||||
//自定义协程类
|
// //自定义协程类
|
||||||
class CoroutineClass : public TC_Thread
|
// class CoroutineClass : public TC_Thread
|
||||||
{
|
// {
|
||||||
public:
|
// public:
|
||||||
/**
|
// /**
|
||||||
* 构造函数
|
// * 构造函数
|
||||||
*/
|
// */
|
||||||
CoroutineClass();
|
// CoroutineClass();
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 析构函数
|
// * 析构函数
|
||||||
*/
|
// */
|
||||||
virtual ~CoroutineClass();
|
// virtual ~CoroutineClass();
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 返回0,代表成功,-1,表示失败
|
// * 返回0,代表成功,-1,表示失败
|
||||||
*/
|
// */
|
||||||
int registerFunc(const vector< tars::TC_Callback<void ()> > &vFunc);
|
// int registerFunc(const vector< std::function<void ()> > &vFunc);
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 线程初始化
|
// * 线程初始化
|
||||||
*/
|
// */
|
||||||
virtual void initialize() {}
|
// virtual void initialize() {}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 线程处理方法
|
// * 线程处理方法
|
||||||
*/
|
// */
|
||||||
virtual void run();
|
// virtual void run();
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 停止线程
|
// * 停止线程
|
||||||
*/
|
// */
|
||||||
void terminate();
|
// void terminate();
|
||||||
|
|
||||||
protected:
|
// protected:
|
||||||
/**
|
// /**
|
||||||
* 线程已经启动, 进入具体协程处理前调用
|
// * 线程已经启动, 进入具体协程处理前调用
|
||||||
*/
|
// */
|
||||||
virtual void startCoro() {}
|
// virtual void startCoro() {}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 线程马上要退出时调用
|
// * 线程马上要退出时调用
|
||||||
*/
|
// */
|
||||||
virtual void stopCoro() {}
|
// virtual void stopCoro() {}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 具体的处理逻辑
|
// * 具体的处理逻辑
|
||||||
*/
|
// */
|
||||||
virtual void handleCoro();
|
// virtual void handleCoro();
|
||||||
|
|
||||||
protected:
|
// protected:
|
||||||
CoroutineScheduler *_coroSched;
|
// CoroutineScheduler *_coroSched;
|
||||||
uint32_t _iPoolSize;
|
// uint32_t _iPoolSize;
|
||||||
size_t _iStackSize;
|
// size_t _iStackSize;
|
||||||
vector< tars::TC_Callback<void ()> > _vFunc;
|
// vector<std::function<void ()> > _vFunc;
|
||||||
};
|
// };
|
||||||
|
|
||||||
CoroutineClass::CoroutineClass()
|
// CoroutineClass::CoroutineClass()
|
||||||
: _coroSched(NULL)
|
// : _coroSched(NULL)
|
||||||
, _iPoolSize(1024)
|
// , _iPoolSize(1024)
|
||||||
, _iStackSize(128*1024)
|
// , _iStackSize(128*1024)
|
||||||
{
|
// {
|
||||||
}
|
// }
|
||||||
|
|
||||||
CoroutineClass::~CoroutineClass()
|
// CoroutineClass::~CoroutineClass()
|
||||||
{
|
// {
|
||||||
if(isAlive())
|
// if(isAlive())
|
||||||
{
|
// {
|
||||||
terminate();
|
// terminate();
|
||||||
|
|
||||||
getThreadControl().join();
|
// getThreadControl().join();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
int CoroutineClass::registerFunc(const vector< tars::TC_Callback<void ()> > &vFunc)
|
// int CoroutineClass::registerFunc(const vector< std::function<void ()> > &vFunc)
|
||||||
{
|
// {
|
||||||
if(vFunc.size() > _iPoolSize || vFunc.size() <= 0)
|
// if(vFunc.size() > _iPoolSize || vFunc.size() <= 0)
|
||||||
{
|
// {
|
||||||
return -1;
|
// return -1;
|
||||||
}
|
// }
|
||||||
|
|
||||||
_vFunc = vFunc;
|
// _vFunc = vFunc;
|
||||||
|
|
||||||
return 0;
|
// return 0;
|
||||||
}
|
// }
|
||||||
|
|
||||||
void CoroutineClass::run()
|
// void CoroutineClass::run()
|
||||||
{
|
// {
|
||||||
initialize();
|
// initialize();
|
||||||
|
|
||||||
startCoro();
|
// startCoro();
|
||||||
|
|
||||||
handleCoro();
|
// handleCoro();
|
||||||
|
|
||||||
stopCoro();
|
// stopCoro();
|
||||||
}
|
// }
|
||||||
|
|
||||||
void CoroutineClass::terminate()
|
// void CoroutineClass::terminate()
|
||||||
{
|
// {
|
||||||
if(_coroSched)
|
// if(_coroSched)
|
||||||
{
|
// {
|
||||||
_coroSched->terminate();
|
// _coroSched->terminate();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
void CoroutineClass::handleCoro()
|
// void CoroutineClass::handleCoro()
|
||||||
{
|
// {
|
||||||
_coroSched = new CoroutineScheduler();
|
// _coroSched = new CoroutineScheduler();
|
||||||
|
|
||||||
_coroSched->init(_iPoolSize, _iStackSize);
|
// _coroSched->init(_iPoolSize, _iStackSize);
|
||||||
|
|
||||||
ServantProxyThreadData * pSptd = ServantProxyThreadData::getData();
|
// ServantProxyThreadData * pSptd = ServantProxyThreadData::getData();
|
||||||
|
|
||||||
assert(pSptd != NULL);
|
// assert(pSptd != NULL);
|
||||||
|
|
||||||
pSptd->_sched = _coroSched;
|
// pSptd->_sched = _coroSched;
|
||||||
|
|
||||||
for(size_t i = 0; i < _vFunc.size(); ++i)
|
// for(size_t i = 0; i < _vFunc.size(); ++i)
|
||||||
{
|
// {
|
||||||
_coroSched->createCoroutine(_vFunc[i]);
|
// _coroSched->createCoroutine(_vFunc[i]);
|
||||||
}
|
// }
|
||||||
|
|
||||||
_coroSched->run();
|
// _coroSched->run();
|
||||||
|
|
||||||
delete _coroSched;
|
// delete _coroSched;
|
||||||
_coroSched = NULL;
|
// _coroSched = NULL;
|
||||||
}
|
// }
|
||||||
|
|
||||||
////////////////////////////////////////////
|
////////////////////////////////////////////
|
||||||
//继承框架的协程类
|
//继承框架的协程类
|
||||||
|
4
examples/HttpDemo/CMakeLists.txt
Normal file
4
examples/HttpDemo/CMakeLists.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
add_subdirectory(HttpClient)
|
||||||
|
add_subdirectory(HttpServer)
|
||||||
|
|
1
examples/HttpDemo/HttpClient/CMakeLists.txt
Normal file
1
examples/HttpDemo/HttpClient/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("HttpClient")
|
@ -161,7 +161,7 @@ int main(int argc,char ** argv)
|
|||||||
tp.exec(fwrapper3);
|
tp.exec(fwrapper3);
|
||||||
cout << "********************" <<endl;
|
cout << "********************" <<endl;
|
||||||
}
|
}
|
||||||
tp.wait();
|
tp.waitForAllDone();
|
||||||
}catch(exception &e)
|
}catch(exception &e)
|
||||||
{
|
{
|
||||||
cout<<e.what()<<endl;
|
cout<<e.what()<<endl;
|
||||||
|
1
examples/HttpDemo/HttpServer/CMakeLists.txt
Normal file
1
examples/HttpDemo/HttpServer/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("HttpServer")
|
@ -21,44 +21,42 @@ using namespace std;
|
|||||||
|
|
||||||
HttpServer g_app;
|
HttpServer g_app;
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////
|
// /////////////////////////////////////////////////////////////////
|
||||||
struct HttpProtocol
|
// struct HttpProtocol
|
||||||
{
|
// {
|
||||||
/**
|
// /**
|
||||||
* 解析http请求
|
// * http协议解析
|
||||||
* @param in
|
// * @param in
|
||||||
* @param out
|
// * @param out
|
||||||
*
|
// *
|
||||||
* @return int
|
// * @return int
|
||||||
*/
|
// */
|
||||||
static int parseHttp(string &in, string &out)
|
// static int parseHttp(TC_NetWorkBuffer &in, vector<char> &out)
|
||||||
{
|
// {
|
||||||
try
|
// try
|
||||||
{
|
// {
|
||||||
//判断请求是否是HTTP请求
|
// bool b = in.checkRequest(in.length());
|
||||||
bool b = TC_HttpRequest ::checkRequest(in.c_str(), in.length());
|
// if(b)
|
||||||
//完整的HTTP请求
|
// {
|
||||||
if(b)
|
// out = in;
|
||||||
{
|
// in.clearBuffers();
|
||||||
out = in;
|
// //TLOGDEBUG("out size: " << out.size() << endl);
|
||||||
in = "";
|
// return TC_EpollServer::PACKET_FULL;
|
||||||
//TLOGDEBUG("out size: " << out.size() << endl);
|
// }
|
||||||
return TC_EpollServer::PACKET_FULL;
|
// else
|
||||||
}
|
// {
|
||||||
else
|
// return TC_EpollServer::PACKET_LESS;
|
||||||
{
|
// }
|
||||||
return TC_EpollServer::PACKET_LESS;
|
// }
|
||||||
}
|
// catch(exception &ex)
|
||||||
}
|
// {
|
||||||
catch(exception &ex)
|
// return TC_EpollServer::PACKET_ERR;
|
||||||
{
|
// }
|
||||||
return TC_EpollServer::PACKET_ERR;
|
|
||||||
}
|
|
||||||
|
|
||||||
return TC_EpollServer::PACKET_LESS; //表示收到的包不完全
|
// return TC_EpollServer::PACKET_LESS; //<2F><>ʾ<EFBFBD>յ<EFBFBD><D5B5>İ<EFBFBD><C4B0><EFBFBD><EFBFBD><EFBFBD>ȫ
|
||||||
}
|
// }
|
||||||
|
|
||||||
};
|
// };
|
||||||
|
|
||||||
void
|
void
|
||||||
HttpServer::initialize()
|
HttpServer::initialize()
|
||||||
@ -67,7 +65,7 @@ HttpServer::initialize()
|
|||||||
//...
|
//...
|
||||||
|
|
||||||
addServant<HttpImp>(ServerConfig::Application + "." + ServerConfig::ServerName + ".HttpObj");
|
addServant<HttpImp>(ServerConfig::Application + "." + ServerConfig::ServerName + ".HttpObj");
|
||||||
addServantProtocol(ServerConfig::Application + "." + ServerConfig::ServerName + ".HttpObj",&HttpProtocol::parseHttp);
|
addServantProtocol(ServerConfig::Application + "." + ServerConfig::ServerName + ".HttpObj",&TC_NetWorkBuffer::parseHttp);
|
||||||
}
|
}
|
||||||
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
||||||
void
|
void
|
||||||
|
@ -31,7 +31,7 @@ public:
|
|||||||
: _current(current)
|
: _current(current)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
BServantCallback(TarsCurrentPtr ¤t, const promise::Promise<std::string> &promise)
|
BServantCallback(TarsCurrentPtr ¤t, const tars::Promise<std::string> &promise)
|
||||||
: _current(current)
|
: _current(current)
|
||||||
, _promise(promise)
|
, _promise(promise)
|
||||||
{}
|
{}
|
||||||
@ -60,7 +60,7 @@ private:
|
|||||||
s += "|ret:";
|
s += "|ret:";
|
||||||
s += TC_Common::tostr(ret);
|
s += TC_Common::tostr(ret);
|
||||||
|
|
||||||
_promise.setException(promise::copyException(s));
|
_promise.setException(tars::copyException(s));
|
||||||
|
|
||||||
TLOGDEBUG("ServerPrxCallback handExp:" << s << endl);
|
TLOGDEBUG("ServerPrxCallback handExp:" << s << endl);
|
||||||
}
|
}
|
||||||
@ -68,7 +68,7 @@ private:
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
TarsCurrentPtr _current;
|
TarsCurrentPtr _current;
|
||||||
promise::Promise<std::string> _promise;
|
tars::Promise<std::string> _promise;
|
||||||
};
|
};
|
||||||
//////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////
|
||||||
class CServantCallback : public CServantPrxCallback
|
class CServantCallback : public CServantPrxCallback
|
||||||
@ -79,7 +79,7 @@ public:
|
|||||||
: _current(current)
|
: _current(current)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
CServantCallback(TarsCurrentPtr ¤t, const promise::Promise<std::string> &promise)
|
CServantCallback(TarsCurrentPtr ¤t, const tars::Promise<std::string> &promise)
|
||||||
: _current(current)
|
: _current(current)
|
||||||
, _promise(promise)
|
, _promise(promise)
|
||||||
{}
|
{}
|
||||||
@ -108,7 +108,7 @@ private:
|
|||||||
s += "|ret:";
|
s += "|ret:";
|
||||||
s += TC_Common::tostr(ret);
|
s += TC_Common::tostr(ret);
|
||||||
|
|
||||||
_promise.setException(promise::copyException(s));
|
_promise.setException(tars::copyException(s));
|
||||||
|
|
||||||
TLOGDEBUG("ServerPrxCallback handExp:" << s << endl);
|
TLOGDEBUG("ServerPrxCallback handExp:" << s << endl);
|
||||||
}
|
}
|
||||||
@ -116,12 +116,12 @@ private:
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
TarsCurrentPtr _current;
|
TarsCurrentPtr _current;
|
||||||
promise::Promise<std::string> _promise;
|
tars::Promise<std::string> _promise;
|
||||||
};
|
};
|
||||||
//////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////
|
||||||
promise::Future<std::string> sendBReq(BServantPrx prx, const std::string& sIn, tars::TarsCurrentPtr current)
|
tars::Future<std::string> sendBReq(BServantPrx prx, const std::string& sIn, tars::TarsCurrentPtr current)
|
||||||
{
|
{
|
||||||
promise::Promise<std::string> promise;
|
tars::Promise<std::string> promise;
|
||||||
|
|
||||||
Test::BServantPrxCallbackPtr cb = new BServantCallback(current, promise);
|
Test::BServantPrxCallbackPtr cb = new BServantCallback(current, promise);
|
||||||
|
|
||||||
@ -130,9 +130,9 @@ promise::Future<std::string> sendBReq(BServantPrx prx, const std::string& sIn, t
|
|||||||
return promise.getFuture();
|
return promise.getFuture();
|
||||||
}
|
}
|
||||||
//////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////
|
||||||
promise::Future<std::string> sendCReq(CServantPrx prx, const std::string& sIn, tars::TarsCurrentPtr current)
|
tars::Future<std::string> sendCReq(CServantPrx prx, const std::string& sIn, tars::TarsCurrentPtr current)
|
||||||
{
|
{
|
||||||
promise::Promise<std::string> promise;
|
tars::Promise<std::string> promise;
|
||||||
|
|
||||||
Test::CServantPrxCallbackPtr cb = new CServantCallback(current, promise);
|
Test::CServantPrxCallbackPtr cb = new CServantCallback(current, promise);
|
||||||
|
|
||||||
@ -141,7 +141,7 @@ promise::Future<std::string> sendCReq(CServantPrx prx, const std::string& sIn, t
|
|||||||
return promise.getFuture();
|
return promise.getFuture();
|
||||||
}
|
}
|
||||||
//////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////
|
||||||
promise::Future<std::string> handleBRspAndSendCReq(CServantPrx prx, TarsCurrentPtr current, const promise::Future<std::string>& future)
|
tars::Future<std::string> handleBRspAndSendCReq(CServantPrx prx, TarsCurrentPtr current, const tars::Future<std::string>& future)
|
||||||
{
|
{
|
||||||
std::string sResult("");
|
std::string sResult("");
|
||||||
std::string sException("");
|
std::string sException("");
|
||||||
@ -157,13 +157,13 @@ promise::Future<std::string> handleBRspAndSendCReq(CServantPrx prx, TarsCurrentP
|
|||||||
sException = e.what();
|
sException = e.what();
|
||||||
}
|
}
|
||||||
|
|
||||||
promise::Promise<std::string> promise;
|
tars::Promise<std::string> promise;
|
||||||
promise.setValue(sException);
|
promise.setValue(sException);
|
||||||
|
|
||||||
return promise.getFuture();
|
return promise.getFuture();
|
||||||
}
|
}
|
||||||
//////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////
|
||||||
int handleCRspAndReturnClient(TarsCurrentPtr current, const promise::Future<std::string>& future)
|
int handleCRspAndReturnClient(TarsCurrentPtr current, const tars::Future<std::string>& future)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
std::string sResult("");
|
std::string sResult("");
|
||||||
@ -184,16 +184,16 @@ int handleCRspAndReturnClient(TarsCurrentPtr current, const promise::Future<std:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
//////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////
|
||||||
int handleBCRspAndReturnClient(TarsCurrentPtr current, const promise::Future<promise::Tuple<promise::Future<std::string>, promise::Future<std::string> > >& allFuture)
|
int handleBCRspAndReturnClient(TarsCurrentPtr current, const tars::Future<std::tuple<tars::Future<std::string>, tars::Future<std::string> > >& allFuture)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
std::string sResult("");
|
std::string sResult("");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
promise::Tuple<promise::Future<std::string>, promise::Future<std::string> > tupleFuture = allFuture.get();
|
std::tuple<tars::Future<std::string>, tars::Future<std::string> > tupleFuture = allFuture.get();
|
||||||
|
|
||||||
std::string sResult1 = tupleFuture.get<0>().get();
|
std::string sResult1 = std::get<0>(tupleFuture).get();
|
||||||
std::string sResult2 = tupleFuture.get<1>().get();
|
std::string sResult2 = std::get<1>(tupleFuture).get();
|
||||||
|
|
||||||
sResult = sResult1;
|
sResult = sResult1;
|
||||||
sResult += "|";
|
sResult += "|";
|
||||||
@ -223,15 +223,30 @@ void AServantImp::initialize()
|
|||||||
void AServantImp::destroy()
|
void AServantImp::destroy()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// class Test1
|
||||||
|
// {
|
||||||
|
// public:
|
||||||
|
// template <typename R>
|
||||||
|
// void then(const std::function<R(const Future&)>& callback);
|
||||||
|
// {
|
||||||
|
// cout <<"then" << endl;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
//////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////
|
||||||
tars::Int32 AServantImp::queryResultSerial(const std::string& sIn, std::string &sOut, tars::TarsCurrentPtr current)
|
tars::Int32 AServantImp::queryResultSerial(const std::string& sIn, std::string &sOut, tars::TarsCurrentPtr current)
|
||||||
{
|
{
|
||||||
current->setResponse(false);
|
current->setResponse(false);
|
||||||
|
|
||||||
promise::Future<std::string> f = sendBReq(_pPrxB, sIn, current);
|
tars::Future<std::string> f = sendBReq(_pPrxB, sIn, current);
|
||||||
|
|
||||||
f.then(tars::TC_Bind(&handleBRspAndSendCReq, _pPrxC, current)).then(tars::TC_Bind(&handleCRspAndReturnClient, current));
|
auto b1 = std::bind(handleBRspAndSendCReq, _pPrxC, current);//, std::placeholders::_3);
|
||||||
|
auto b2 = std::bind(handleCRspAndReturnClient, current);//, std::placeholders::_2);
|
||||||
|
f.then(b1).then(b2);
|
||||||
|
|
||||||
|
// Test1 t;
|
||||||
|
// t.then<std::string>(b1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
//////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////
|
||||||
@ -239,13 +254,13 @@ tars::Int32 AServantImp::queryResultParallel(const std::string& sIn, std::string
|
|||||||
{
|
{
|
||||||
current->setResponse(false);
|
current->setResponse(false);
|
||||||
|
|
||||||
promise::Future<std::string> f1 = sendBReq(_pPrxB, sIn, current);
|
tars::Future<std::string> f1 = sendBReq(_pPrxB, sIn, current);
|
||||||
|
|
||||||
promise::Future<std::string> f2 = sendCReq(_pPrxC, sIn, current);
|
tars::Future<std::string> f2 = sendCReq(_pPrxC, sIn, current);
|
||||||
|
|
||||||
promise::Future<promise::Tuple<promise::Future<std::string>, promise::Future<std::string> > > f_all = promise::whenAll(f1, f2);
|
tars::Future<std::tuple<tars::Future<std::string>, tars::Future<std::string> > > f_all = tars::whenAll(f1, f2);
|
||||||
|
|
||||||
f_all.then(tars::TC_Bind(&handleBCRspAndReturnClient, current));
|
f_all.then(std::bind(&handleBCRspAndReturnClient, current));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -29,16 +29,16 @@
|
|||||||
using namespace Test;
|
using namespace Test;
|
||||||
|
|
||||||
///////////////////////////////////
|
///////////////////////////////////
|
||||||
promise::Future<std::string> sendBReq(BServantPrx prx, const std::string& sIn, tars::TarsCurrentPtr current);
|
tars::Future<std::string> sendBReq(BServantPrx prx, const std::string& sIn, tars::TarsCurrentPtr current);
|
||||||
|
|
||||||
promise::Future<std::string> handleBRspAndSendCReq(CServantPrx prx, TarsCurrentPtr current, const promise::Future<std::string>& future);
|
tars::Future<std::string> handleBRspAndSendCReq(CServantPrx prx, TarsCurrentPtr current, const tars::Future<std::string>& future);
|
||||||
|
|
||||||
promise::Future<std::string> sendCReq(CServantPrx prx, const std::string& sIn, tars::TarsCurrentPtr current);
|
tars::Future<std::string> sendCReq(CServantPrx prx, const std::string& sIn, tars::TarsCurrentPtr current);
|
||||||
|
|
||||||
int handleCRspAndReturnClient(TarsCurrentPtr current, const promise::Future<std::string>& future);
|
int handleCRspAndReturnClient(TarsCurrentPtr current, const tars::Future<std::string>& future);
|
||||||
|
|
||||||
///////////////////////////////////
|
///////////////////////////////////
|
||||||
int handleBCRspAndReturnClient(TarsCurrentPtr current, const promise::Future<promise::Tuple<promise::Future<std::string>, promise::Future<std::string> > >& allFuture);
|
int handleBCRspAndReturnClient(TarsCurrentPtr current, const tars::Future<std::tuple<tars::Future<std::string>, tars::Future<std::string> > >& allFuture);
|
||||||
|
|
||||||
///////////////////////////////////
|
///////////////////////////////////
|
||||||
class AServantImp : public Test::AServant
|
class AServantImp : public Test::AServant
|
||||||
|
1
examples/PromiseDemo/AServer/CMakeLists.txt
Normal file
1
examples/PromiseDemo/AServer/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("PromiseDemoAServer")
|
1
examples/PromiseDemo/BServer/CMakeLists.txt
Normal file
1
examples/PromiseDemo/BServer/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("PromiseDemoBServer")
|
6
examples/PromiseDemo/CMakeLists.txt
Normal file
6
examples/PromiseDemo/CMakeLists.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
add_subdirectory(AServer)
|
||||||
|
add_subdirectory(BServer)
|
||||||
|
add_subdirectory(CServer)
|
||||||
|
add_subdirectory(Client)
|
||||||
|
|
1
examples/PromiseDemo/CServer/CMakeLists.txt
Normal file
1
examples/PromiseDemo/CServer/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("PromiseDemoCServer")
|
1
examples/PromiseDemo/Client/CMakeLists.txt
Normal file
1
examples/PromiseDemo/Client/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("PromiseDemoClient")
|
4
examples/PushDemo/CMakeLists.txt
Normal file
4
examples/PushDemo/CMakeLists.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
add_subdirectory(PushClient)
|
||||||
|
add_subdirectory(PushServer)
|
||||||
|
|
1
examples/PushDemo/PushClient/CMakeLists.txt
Normal file
1
examples/PushDemo/PushClient/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("PushClient")
|
@ -5,71 +5,93 @@
|
|||||||
/*
|
/*
|
||||||
响应包解码函数,根据特定格式解码从服务端收到的数据,解析为ResponsePacket
|
响应包解码函数,根据特定格式解码从服务端收到的数据,解析为ResponsePacket
|
||||||
*/
|
*/
|
||||||
static size_t pushResponse(const char* recvBuffer, size_t length, list<ResponsePacket>& done)
|
static TC_NetWorkBuffer::PACKET_TYPE pushResponse(TC_NetWorkBuffer &in, ResponsePacket& done)
|
||||||
{
|
{
|
||||||
size_t pos = 0;
|
size_t len = sizeof(tars::Int32);
|
||||||
while (pos < length)
|
|
||||||
{
|
|
||||||
unsigned int len = length - pos;
|
|
||||||
if(len < sizeof(unsigned int))
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int iHeaderLen = ntohl(*(unsigned int*)(recvBuffer + pos));
|
if (in.getBufferLength() < len)
|
||||||
|
{
|
||||||
|
return TC_NetWorkBuffer::PACKET_LESS;
|
||||||
|
}
|
||||||
|
|
||||||
//做一下保护,长度大于M
|
string header;
|
||||||
if (iHeaderLen > 100000 || iHeaderLen < sizeof(unsigned int))
|
in.getHeader(len, header);
|
||||||
{
|
|
||||||
throw TarsDecodeException("packet length too long or too short,len:" + TC_Common::tostr(iHeaderLen));
|
|
||||||
}
|
|
||||||
|
|
||||||
//包没有接收全
|
assert(header.size() == len);
|
||||||
if (len < iHeaderLen)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ResponsePacket rsp;
|
|
||||||
rsp.iRequestId = ntohl(*((unsigned int *)(recvBuffer + pos + sizeof(unsigned int))));
|
|
||||||
rsp.sBuffer.resize(iHeaderLen - 2*sizeof(unsigned int));
|
|
||||||
::memcpy(&rsp.sBuffer[0], recvBuffer + pos + 2*sizeof(unsigned int), iHeaderLen - 2*sizeof(unsigned int));
|
|
||||||
|
|
||||||
pos += iHeaderLen;
|
tars::Int32 iHeaderLen = 0;
|
||||||
|
|
||||||
done.push_back(rsp);
|
::memcpy(&iHeaderLen, header.c_str(), sizeof(tars::Int32));
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return pos;
|
iHeaderLen = ntohl(iHeaderLen);
|
||||||
|
|
||||||
|
//做一下保护,长度大于M
|
||||||
|
if (iHeaderLen > 100000 || iHeaderLen < sizeof(unsigned int))
|
||||||
|
{
|
||||||
|
throw TarsDecodeException("packet length too long or too short,len:" + TC_Common::tostr(iHeaderLen));
|
||||||
|
}
|
||||||
|
|
||||||
|
//包没有接收全
|
||||||
|
if (in.getBufferLength() < (uint32_t)iHeaderLen)
|
||||||
|
{
|
||||||
|
return TC_NetWorkBuffer::PACKET_LESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
tars::Int32 iRequestId = 0;
|
||||||
|
string sRequestId;
|
||||||
|
in.getHeader(sizeof(iHeaderLen), sRequestId);
|
||||||
|
|
||||||
|
ResponsePacket rsp;
|
||||||
|
rsp.iRequestId = ntohl(*((unsigned int *)(sRequestId.c_str())));
|
||||||
|
in.getHeader(iHeaderLen - sizeof(iHeaderLen) - sizeof(iRequestId), rsp.sBuffer);
|
||||||
|
|
||||||
|
return TC_NetWorkBuffer::PACKET_FULL;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
请求包编码函数,本函数的打包格式为
|
请求包编码函数,本函数的打包格式为
|
||||||
整个包长度(字节)+iRequestId(字节)+包内容
|
整个包长度(字节)+iRequestId(字节)+包内容
|
||||||
*/
|
*/
|
||||||
static void pushRequest(const RequestPacket& request, string& buff)
|
static void pushRequest(const RequestPacket& request, shared_ptr<TC_NetWorkBuffer::SendBuffer>& buff)
|
||||||
{
|
{
|
||||||
unsigned int net_bufflength = htonl(request.sBuffer.size()+8);
|
// unsigned int net_bufflength = htonl(request.sBuffer.size()+8);
|
||||||
unsigned char * bufflengthptr = (unsigned char*)(&net_bufflength);
|
// unsigned char * bufflengthptr = (unsigned char*)(&net_bufflength);
|
||||||
|
|
||||||
buff = "";
|
// buff = "";
|
||||||
for (int i = 0; i<4; ++i)
|
// for (int i = 0; i<4; ++i)
|
||||||
{
|
// {
|
||||||
buff += *bufflengthptr++;
|
// buff += *bufflengthptr++;
|
||||||
}
|
// }
|
||||||
|
|
||||||
unsigned int netrequestId = htonl(request.iRequestId);
|
// unsigned int netrequestId = htonl(request.iRequestId);
|
||||||
unsigned char * netrequestIdptr = (unsigned char*)(&netrequestId);
|
// unsigned char * netrequestIdptr = (unsigned char*)(&netrequestId);
|
||||||
|
|
||||||
for (int i = 0; i<4; ++i)
|
// for (int i = 0; i<4; ++i)
|
||||||
{
|
// {
|
||||||
buff += *netrequestIdptr++;
|
// buff += *netrequestIdptr++;
|
||||||
}
|
// }
|
||||||
|
|
||||||
string tmp;
|
// string tmp;
|
||||||
tmp.assign((const char*)(&request.sBuffer[0]), request.sBuffer.size());
|
// tmp.assign((const char*)(&request.sBuffer[0]), request.sBuffer.size());
|
||||||
buff+=tmp;
|
// buff+=tmp;
|
||||||
|
|
||||||
|
TarsOutputStream<BufferWriterVector> os;
|
||||||
|
|
||||||
|
tars::Int32 iHeaderLen = 0;
|
||||||
|
tars::Int32 iRequestId = request.iRequestId;
|
||||||
|
|
||||||
|
// 先预留8个字节长度
|
||||||
|
os.writeBuf((const char *)&iHeaderLen, sizeof(iHeaderLen));
|
||||||
|
os.writeBuf((const char *)&iRequestId, sizeof(iRequestId));
|
||||||
|
|
||||||
|
request.writeTo(os);
|
||||||
|
|
||||||
|
buff->swap(os.getByteBuffer());
|
||||||
|
|
||||||
|
// assert(buff->length() >= 4);
|
||||||
|
|
||||||
|
iHeaderLen = htonl((int)(buff->length()));
|
||||||
|
|
||||||
|
memcpy((void*)buff->buffer(), (const char *)&iHeaderLen, sizeof(iHeaderLen));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void printResult(int iRequestId, const string &sResponseStr)
|
static void printResult(int iRequestId, const string &sResponseStr)
|
||||||
@ -87,15 +109,15 @@ int TestPushCallBack::onDispatch(ReqMessagePtr msg)
|
|||||||
if(msg->request.sFuncName == "printResult")
|
if(msg->request.sFuncName == "printResult")
|
||||||
{
|
{
|
||||||
string sRet;
|
string sRet;
|
||||||
cout << "sBuffer: " << msg->response.sBuffer.size() << endl;
|
cout << "sBuffer: " << msg->response->sBuffer.size() << endl;
|
||||||
sRet.assign(&(msg->response.sBuffer[0]), msg->response.sBuffer.size());
|
sRet.assign(&(msg->response->sBuffer[0]), msg->response->sBuffer.size());
|
||||||
printResult(msg->request.iRequestId, sRet);
|
printResult(msg->request.iRequestId, sRet);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if(msg->response.iRequestId == 0)
|
else if(msg->response->iRequestId == 0)
|
||||||
{
|
{
|
||||||
string sRet;
|
string sRet;
|
||||||
sRet.assign(&(msg->response.sBuffer[0]), msg->response.sBuffer.size());
|
sRet.assign(&(msg->response->sBuffer[0]), msg->response->sBuffer.size());
|
||||||
printPushInfo(sRet);
|
printPushInfo(sRet);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
1
examples/PushDemo/PushServer/CMakeLists.txt
Normal file
1
examples/PushDemo/PushServer/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("PushServer")
|
@ -7,37 +7,6 @@ TestPushServer g_app;
|
|||||||
|
|
||||||
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static int parse(string &in, string &out)
|
|
||||||
{
|
|
||||||
if(in.length() < sizeof(unsigned int))
|
|
||||||
{
|
|
||||||
return TC_EpollServer::PACKET_LESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int iHeaderLen;
|
|
||||||
|
|
||||||
memcpy(&iHeaderLen, in.c_str(), sizeof(unsigned int));
|
|
||||||
|
|
||||||
iHeaderLen = ntohl(iHeaderLen);
|
|
||||||
|
|
||||||
if(iHeaderLen < (unsigned int)(sizeof(unsigned int))|| iHeaderLen > 1000000)
|
|
||||||
{
|
|
||||||
return TC_EpollServer::PACKET_ERR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if((unsigned int)in.length() < iHeaderLen)
|
|
||||||
{
|
|
||||||
return TC_EpollServer::PACKET_LESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
out = in.substr(0, iHeaderLen);
|
|
||||||
|
|
||||||
in = in.substr(iHeaderLen);
|
|
||||||
|
|
||||||
return TC_EpollServer::PACKET_FULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
TestPushServer::initialize()
|
TestPushServer::initialize()
|
||||||
{
|
{
|
||||||
@ -46,7 +15,7 @@ TestPushServer::initialize()
|
|||||||
|
|
||||||
addServant<TestPushServantImp>(ServerConfig::Application + "." + ServerConfig::ServerName + ".TestPushServantObj");
|
addServant<TestPushServantImp>(ServerConfig::Application + "." + ServerConfig::ServerName + ".TestPushServantObj");
|
||||||
|
|
||||||
addServantProtocol("Test.TestPushServer.TestPushServantObj", parse);
|
addServantProtocol("Test.TestPushServer.TestPushServantObj", TC_NetWorkBuffer::parseBinary4<8, 1024*1024*10>);
|
||||||
|
|
||||||
pushThread.start();
|
pushThread.start();
|
||||||
|
|
||||||
|
5
examples/QuickStartDemo/CMakeLists.txt
Normal file
5
examples/QuickStartDemo/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
include_directories(HelloServer/Server)
|
||||||
|
add_subdirectory(HelloServer)
|
||||||
|
add_subdirectory(ProxyServer)
|
||||||
|
|
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("QuickStartDemoAsyncClient")
|
5
examples/QuickStartDemo/HelloServer/CMakeLists.txt
Normal file
5
examples/QuickStartDemo/HelloServer/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
include_directories(Server)
|
||||||
|
add_subdirectory(Server)
|
||||||
|
add_subdirectory(Client)
|
||||||
|
add_subdirectory(AsyncClient)
|
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("QuickStartDemoClient")
|
@ -1,26 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
module TestApp
|
|
||||||
{
|
|
||||||
|
|
||||||
interface Hello
|
|
||||||
{
|
|
||||||
int test();
|
|
||||||
int testHello(string sReq, out string sRsp);
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
@ -1,42 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "HelloImp.h"
|
|
||||||
#include "servant/Application.h"
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////
|
|
||||||
void HelloImp::initialize()
|
|
||||||
{
|
|
||||||
//initialize servant here:
|
|
||||||
//...
|
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////
|
|
||||||
void HelloImp::destroy()
|
|
||||||
{
|
|
||||||
//destroy servant here:
|
|
||||||
//...
|
|
||||||
}
|
|
||||||
|
|
||||||
int HelloImp::testHello(const std::string &sReq, std::string &sRsp, tars::TarsCurrentPtr current)
|
|
||||||
{
|
|
||||||
TLOGDEBUG("HelloImp::testHellosReq:"<<sReq<<endl);
|
|
||||||
sRsp = sReq;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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 _HelloImp_H_
|
|
||||||
#define _HelloImp_H_
|
|
||||||
|
|
||||||
#include "servant/Application.h"
|
|
||||||
#include "Hello.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
class HelloImp : public TestApp::Hello
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
virtual ~HelloImp() {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
virtual void initialize();
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
virtual void destroy();
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
virtual int test(tars::TarsCurrentPtr current) { return 0;};
|
|
||||||
|
|
||||||
virtual int testHello(const std::string &sReq, std::string &sRsp, tars::TarsCurrentPtr current);
|
|
||||||
};
|
|
||||||
/////////////////////////////////////////////////////
|
|
||||||
#endif
|
|
@ -1,59 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "HelloServer.h"
|
|
||||||
#include "HelloImp.h"
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
HelloServer g_app;
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
void
|
|
||||||
HelloServer::initialize()
|
|
||||||
{
|
|
||||||
//initialize application here:
|
|
||||||
//...
|
|
||||||
|
|
||||||
addServant<HelloImp>(ServerConfig::Application + "." + ServerConfig::ServerName + ".HelloObj");
|
|
||||||
}
|
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
void
|
|
||||||
HelloServer::destroyApp()
|
|
||||||
{
|
|
||||||
//destroy application here:
|
|
||||||
//...
|
|
||||||
}
|
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
int
|
|
||||||
main(int argc, char* argv[])
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
g_app.main(argc, argv);
|
|
||||||
g_app.waitForShutdown();
|
|
||||||
}
|
|
||||||
catch (std::exception& e)
|
|
||||||
{
|
|
||||||
cerr << "std::exception:" << e.what() << std::endl;
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
cerr << "unknown exception." << std::endl;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
/////////////////////////////////////////////////////////////////
|
|
@ -1,50 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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 _HelloServer_H_
|
|
||||||
#define _HelloServer_H_
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
#include "servant/Application.h"
|
|
||||||
|
|
||||||
using namespace tars;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
class HelloServer : public Application
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
virtual ~HelloServer() {};
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
virtual void initialize();
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
virtual void destroyApp();
|
|
||||||
};
|
|
||||||
|
|
||||||
extern HelloServer g_app;
|
|
||||||
|
|
||||||
////////////////////////////////////////////
|
|
||||||
#endif
|
|
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("QuickStartDemo")
|
@ -1,16 +0,0 @@
|
|||||||
|
|
||||||
#-----------------------------------------------------------------------
|
|
||||||
|
|
||||||
APP := TestApp
|
|
||||||
TARGET := HelloServer
|
|
||||||
CONFIG :=
|
|
||||||
STRIP_FLAG:= N
|
|
||||||
|
|
||||||
INCLUDE +=
|
|
||||||
LIB +=
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------
|
|
||||||
|
|
||||||
include /usr/local/tars/cpp/makefile/makefile.tars
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------
|
|
5
examples/QuickStartDemo/ProxyServer/CMakeLists.txt
Normal file
5
examples/QuickStartDemo/ProxyServer/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
include_directories(Server)
|
||||||
|
add_subdirectory(Server)
|
||||||
|
add_subdirectory(Client)
|
||||||
|
|
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("ProxyServerClient")
|
@ -1,26 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
module TestApp
|
|
||||||
{
|
|
||||||
|
|
||||||
interface Proxy
|
|
||||||
{
|
|
||||||
int test();
|
|
||||||
int testProxy(string sReq, out string sRsp);
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
@ -1,83 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "ProxyImp.h"
|
|
||||||
#include "ProxyServer.h"
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
using namespace tars;
|
|
||||||
|
|
||||||
class HelloCallback : public HelloPrxCallback
|
|
||||||
{
|
|
||||||
|
|
||||||
public:
|
|
||||||
HelloCallback(TarsCurrentPtr ¤t)
|
|
||||||
: _current(current)
|
|
||||||
{}
|
|
||||||
|
|
||||||
virtual void callback_testHello(tars::Int32 ret, const std::string& sOut)
|
|
||||||
{
|
|
||||||
Proxy::async_response_testProxy(_current, ret, sOut);
|
|
||||||
}
|
|
||||||
virtual void callback_testHello_exception(tars::Int32 ret)
|
|
||||||
{
|
|
||||||
TLOGERROR("HelloCallback callback_testHello_exception ret:" << ret << endl);
|
|
||||||
|
|
||||||
Proxy::async_response_testProxy(_current, ret, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
TarsCurrentPtr _current;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////
|
|
||||||
void ProxyImp::initialize()
|
|
||||||
{
|
|
||||||
//initialize servant here:
|
|
||||||
//...
|
|
||||||
|
|
||||||
_prx = Application::getCommunicator()->stringToProxy<HelloPrx>("TestApp.HelloServer.HelloObj");
|
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////
|
|
||||||
void ProxyImp::destroy()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////
|
|
||||||
tars::Int32 ProxyImp::test(tars::TarsCurrentPtr current) { return 0;}
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////
|
|
||||||
tars::Int32 ProxyImp::testProxy(const std::string& sIn, std::string &sOut, tars::TarsCurrentPtr current)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
current->setResponse(false);
|
|
||||||
|
|
||||||
TestApp::HelloPrxCallbackPtr cb = new HelloCallback(current);
|
|
||||||
|
|
||||||
_prx->tars_set_timeout(3000)->async_testHello(cb,sIn);
|
|
||||||
}
|
|
||||||
catch(std::exception &ex)
|
|
||||||
{
|
|
||||||
current->setResponse(true);
|
|
||||||
|
|
||||||
TLOGERROR("ProxyImp::testProxy ex:" << ex.what() << endl);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,63 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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 __PROXY_IMP_H_
|
|
||||||
#define __PROXY_IMP_H_
|
|
||||||
|
|
||||||
#include "servant/Application.h"
|
|
||||||
#include "Hello.h"
|
|
||||||
#include "Proxy.h"
|
|
||||||
|
|
||||||
using namespace TestApp;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
class ProxyImp : public TestApp::Proxy
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
virtual ~ProxyImp() {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
virtual void initialize();
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
virtual void destroy();
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
virtual tars::Int32 test(tars::TarsCurrentPtr current);
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
virtual tars::Int32 testProxy(const std::string& sReq, std::string &sRsp, tars::TarsCurrentPtr current);
|
|
||||||
|
|
||||||
private:
|
|
||||||
HelloPrx _prx;
|
|
||||||
|
|
||||||
};
|
|
||||||
/////////////////////////////////////////////////////
|
|
||||||
#endif
|
|
@ -1,57 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "ProxyServer.h"
|
|
||||||
#include "ProxyImp.h"
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
ProxyServer g_app;
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
void ProxyServer::initialize()
|
|
||||||
{
|
|
||||||
//initialize application here:
|
|
||||||
addServant<ProxyImp>(ServerConfig::Application + "." + ServerConfig::ServerName + ".ProxyObj");
|
|
||||||
|
|
||||||
}
|
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
void ProxyServer::destroyApp()
|
|
||||||
{
|
|
||||||
//destroy application here:
|
|
||||||
//...
|
|
||||||
}
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////
|
|
||||||
int
|
|
||||||
main(int argc, char* argv[])
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
g_app.main(argc, argv);
|
|
||||||
g_app.waitForShutdown();
|
|
||||||
}
|
|
||||||
catch (std::exception& e)
|
|
||||||
{
|
|
||||||
cerr << "std::exception:" << e.what() << std::endl;
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
cerr << "unknown exception." << std::endl;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
/////////////////////////////////////////////////////////////////
|
|
@ -1,52 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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 __PROXY_SERVER_H_
|
|
||||||
#define __PROXY_SERVER_H_
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
#include "servant/Application.h"
|
|
||||||
|
|
||||||
using namespace tars;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
class ProxyServer : public Application
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
virtual ~ProxyServer() {};
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
virtual void initialize();
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
virtual void destroyApp();
|
|
||||||
protected:
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
extern ProxyServer g_app;
|
|
||||||
|
|
||||||
////////////////////////////////////////////
|
|
||||||
#endif
|
|
@ -0,0 +1,3 @@
|
|||||||
|
build_tars_server("ProxyServer")
|
||||||
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
|||||||
|
|
||||||
#-----------------------------------------------------------------------
|
|
||||||
|
|
||||||
APP := TestApp
|
|
||||||
TARGET := ProxyServer
|
|
||||||
CONFIG :=
|
|
||||||
STRIP_FLAG:= N
|
|
||||||
TARS2CPP_FLAG:=
|
|
||||||
|
|
||||||
INCLUDE +=
|
|
||||||
LIB +=
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------
|
|
||||||
include /home/tarsproto/TestApp/HelloServer/HelloServer.mk
|
|
||||||
include /usr/local/tars/cpp/makefile/makefile.tars
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------
|
|
5
examples/StressDemo/CMakeLists.txt
Normal file
5
examples/StressDemo/CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
include_directories(TarsStressServer)
|
||||||
|
add_subdirectory(TarsStressServer)
|
||||||
|
add_subdirectory(TarsStressClient)
|
||||||
|
|
1
examples/StressDemo/TarsStressClient/CMakeLists.txt
Normal file
1
examples/StressDemo/TarsStressClient/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("TarsStressClient")
|
1
examples/StressDemo/TarsStressServer/CMakeLists.txt
Normal file
1
examples/StressDemo/TarsStressServer/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
build_tars_server("TarsStressServer")
|
@ -61,6 +61,8 @@ static BOOL WINAPI HandlerRoutine(DWORD dwCtrlType)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
std::string ServerConfig::TarsPath; //服务路径
|
||||||
std::string ServerConfig::Application; //应用名称
|
std::string ServerConfig::Application; //应用名称
|
||||||
std::string ServerConfig::ServerName; //服务名称,一个服务名称含一个或多个服务标识
|
std::string ServerConfig::ServerName; //服务名称,一个服务名称含一个或多个服务标识
|
||||||
std::string ServerConfig::LocalIp; //本机IP
|
std::string ServerConfig::LocalIp; //本机IP
|
||||||
@ -1238,7 +1240,7 @@ void Application::initializeServer()
|
|||||||
|
|
||||||
if(!ServerConfig::Local.empty())
|
if(!ServerConfig::Local.empty())
|
||||||
{
|
{
|
||||||
ServantHelperManager::getInstance()->addServant<AdminServant>("AdminObj");
|
ServantHelperManager::getInstance()->addServant<AdminServant>("AdminObj", this);
|
||||||
|
|
||||||
ServantHelperManager::getInstance()->setAdapterServant("AdminAdapter", "AdminObj");
|
ServantHelperManager::getInstance()->setAdapterServant("AdminAdapter", "AdminObj");
|
||||||
|
|
||||||
|
@ -47,6 +47,16 @@ string Servant::getName() const
|
|||||||
return _name;
|
return _name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Servant::setApplication(Application *application)
|
||||||
|
{
|
||||||
|
_application = application;
|
||||||
|
}
|
||||||
|
|
||||||
|
Application* Servant::getApplication() const
|
||||||
|
{
|
||||||
|
return _application;
|
||||||
|
}
|
||||||
|
|
||||||
void Servant::setHandle(TC_EpollServer::Handle* handle)
|
void Servant::setHandle(TC_EpollServer::Handle* handle)
|
||||||
{
|
{
|
||||||
_handle = handle;
|
_handle = handle;
|
||||||
|
@ -48,7 +48,7 @@ void ServantHelperManager::setAdapterServant(const string &sAdapter, const strin
|
|||||||
bool ServantHelperManager::setDyeing(const string & sDyeingKey, const string & sDyeingServant,
|
bool ServantHelperManager::setDyeing(const string & sDyeingKey, const string & sDyeingServant,
|
||||||
const string & sDyeingInterface)
|
const string & sDyeingInterface)
|
||||||
{
|
{
|
||||||
TC_LockT<TC_ThreadMutex> lock(_mutex);
|
TC_LockT<TC_SpinLock> lock(_mutex);
|
||||||
|
|
||||||
_dyeingKey = sDyeingKey;
|
_dyeingKey = sDyeingKey;
|
||||||
_dyeingServant = sDyeingServant;
|
_dyeingServant = sDyeingServant;
|
||||||
@ -61,7 +61,7 @@ bool ServantHelperManager::setDyeing(const string & sDyeingKey, const string & s
|
|||||||
|
|
||||||
bool ServantHelperManager::isDyeingReq(const string & sKey, const string & sServant, const string & sInterface)
|
bool ServantHelperManager::isDyeingReq(const string & sKey, const string & sServant, const string & sInterface)
|
||||||
{
|
{
|
||||||
TC_LockT<TC_ThreadMutex> lock(_mutex);
|
TC_LockT<TC_SpinLock> lock(_mutex);
|
||||||
|
|
||||||
return ((_dyeingKey == sKey) && (_dyeingServant == sServant) &&
|
return ((_dyeingKey == sKey) && (_dyeingServant == sServant) &&
|
||||||
(_dyeingInterface == "" || _dyeingInterface == sInterface) );
|
(_dyeingInterface == "" || _dyeingInterface == sInterface) );
|
||||||
|
@ -746,21 +746,39 @@ public:
|
|||||||
virtual ~Future() {}
|
virtual ~Future() {}
|
||||||
|
|
||||||
template <typename R>
|
template <typename R>
|
||||||
Future<typename detail::resolved_type<R>::type> then(const std::function<R(const Future&)>& callback) const
|
Future<R> then(const std::function<R(const Future<T>&)>& callback) const
|
||||||
{
|
{
|
||||||
typedef typename detail::resolved_type<R>::type value_type;
|
// typedef typename detail::resolved_type<R>::type value_type;
|
||||||
|
|
||||||
if (!this->m_future)
|
if (!this->m_future)
|
||||||
{
|
{
|
||||||
throwException(FutureUninitializedException(__FILE__, __LINE__));
|
throwException(FutureUninitializedException(__FILE__, __LINE__));
|
||||||
}
|
}
|
||||||
|
|
||||||
Promise<value_type> promise;
|
Promise<R> promise;
|
||||||
this->m_future->registerCallback(TC_Bind(&detail::SequentialCallback<R, T>::template run<R>,
|
shared_ptr<detail::SequentialCallback<R, T>> ptr(new detail::SequentialCallback<R, T>(callback, promise));
|
||||||
tc_owned(new detail::SequentialCallback<R, T>(callback, promise))));
|
|
||||||
|
this->m_future->registerCallback(std::bind(&detail::SequentialCallback<R, T>::template run<R>, ptr));
|
||||||
return promise.getFuture();
|
return promise.getFuture();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// template <typename R>
|
||||||
|
// Future<typename detail::resolved_type<R>::type> then(const std::function<R(const Future<T>&)>& callback) const
|
||||||
|
// {
|
||||||
|
// typedef typename detail::resolved_type<R>::type value_type;
|
||||||
|
|
||||||
|
// if (!this->m_future)
|
||||||
|
// {
|
||||||
|
// throwException(FutureUninitializedException(__FILE__, __LINE__));
|
||||||
|
// }
|
||||||
|
|
||||||
|
// Promise<value_type> promise;
|
||||||
|
// this->m_future->registerCallback(TC_Bind(&detail::SequentialCallback<R, T>::template run<R>,
|
||||||
|
// tc_owned(new detail::SequentialCallback<R, T>(callback, promise))));
|
||||||
|
// return promise.getFuture();
|
||||||
|
// }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Future(const typename detail::FutureBase<T>::FuturePtr& future)
|
Future(const typename detail::FutureBase<T>::FuturePtr& future)
|
||||||
@ -784,7 +802,7 @@ public:
|
|||||||
virtual ~Future() {}
|
virtual ~Future() {}
|
||||||
|
|
||||||
template <typename R>
|
template <typename R>
|
||||||
Future<typename detail::resolved_type<R>::type> then(const std::function<R(const Future&)>& callback) const
|
Future<typename detail::resolved_type<R>::type> then(const std::function<R(const Future<void>&)>& callback) const
|
||||||
{
|
{
|
||||||
typedef typename detail::resolved_type<R>::type value_type;
|
typedef typename detail::resolved_type<R>::type value_type;
|
||||||
|
|
||||||
|
@ -56,10 +56,10 @@ namespace tars
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// FutureAllValueType is supposed to be of type promise::std::tuple<promise::Future, ...> or
|
// FutureAllValueType is supposed to be of type tars::std::tuple<tars::Future, ...> or
|
||||||
// std::vector<promise::Future>.
|
// std::vector<tars::Future>.
|
||||||
//
|
//
|
||||||
// This implementation is for promise::std::tuple<>.
|
// This implementation is for tars::std::tuple<>.
|
||||||
template <typename FutureAllValueType>
|
template <typename FutureAllValueType>
|
||||||
class ParallelAllCallback : private ParallelAllCallbackBase<FutureAllValueType>
|
class ParallelAllCallback : private ParallelAllCallbackBase<FutureAllValueType>
|
||||||
{
|
{
|
||||||
@ -88,7 +88,7 @@ namespace tars
|
|||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
this->m_promise_all.setException(promise::currentException());
|
this->m_promise_all.setException(currentException());
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -100,7 +100,7 @@ namespace tars
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// This implementation is specialized for std::vector<promise::Future<> >.
|
// This implementation is specialized for std::vector<tars::Future<> >.
|
||||||
template <typename FutureType>
|
template <typename FutureType>
|
||||||
class ParallelAllCallback<std::vector<FutureType> > : private ParallelAllCallbackBase<std::vector<FutureType> >
|
class ParallelAllCallback<std::vector<FutureType> > : private ParallelAllCallbackBase<std::vector<FutureType> >
|
||||||
{
|
{
|
||||||
@ -133,7 +133,7 @@ namespace tars
|
|||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
this->m_promise_all.setException(promise::currentException());
|
this->m_promise_all.setException(tars::currentException());
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -181,8 +181,8 @@ namespace tars
|
|||||||
|
|
||||||
PromiseAll promise_all;
|
PromiseAll promise_all;
|
||||||
std::shared_ptr<WhenAllCallback> future_callback(new WhenAllCallback(promise_all));
|
std::shared_ptr<WhenAllCallback> future_callback(new WhenAllCallback(promise_all));
|
||||||
future1.then(tars::TC_Bind(&WhenAllCallback::template on_future<0>, tars::tc_shared(future_callback)));
|
future1.then(std::bind(&WhenAllCallback::template on_future<0>, (future_callback)));
|
||||||
future2.then(tars::TC_Bind(&WhenAllCallback::template on_future<1>, tars::tc_shared(future_callback)));
|
future2.then(std::bind(&WhenAllCallback::template on_future<1>, (future_callback)));
|
||||||
return promise_all.getFuture();
|
return promise_all.getFuture();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,9 +196,9 @@ namespace tars
|
|||||||
|
|
||||||
PromiseAll promise_all;
|
PromiseAll promise_all;
|
||||||
std::shared_ptr<WhenAllCallback> future_callback(new WhenAllCallback(promise_all));
|
std::shared_ptr<WhenAllCallback> future_callback(new WhenAllCallback(promise_all));
|
||||||
future1.then(tars::TC_Bind(&WhenAllCallback::template on_future<0>, tars::tc_shared(future_callback)));
|
future1.then(std::bind(&WhenAllCallback::template on_future<0>, (future_callback)));
|
||||||
future2.then(tars::TC_Bind(&WhenAllCallback::template on_future<1>, tars::tc_shared(future_callback)));
|
future2.then(std::bind(&WhenAllCallback::template on_future<1>, (future_callback)));
|
||||||
future3.then(tars::TC_Bind(&WhenAllCallback::template on_future<2>, tars::tc_shared(future_callback)));
|
future3.then(std::bind(&WhenAllCallback::template on_future<2>, (future_callback)));
|
||||||
return promise_all.getFuture();
|
return promise_all.getFuture();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,10 +212,10 @@ namespace tars
|
|||||||
|
|
||||||
PromiseAll promise_all;
|
PromiseAll promise_all;
|
||||||
std::shared_ptr<WhenAllCallback> future_callback(new WhenAllCallback(promise_all));
|
std::shared_ptr<WhenAllCallback> future_callback(new WhenAllCallback(promise_all));
|
||||||
future1.then(tars::TC_Bind(&WhenAllCallback::template on_future<0>, tars::tc_shared(future_callback)));
|
future1.then(std::bind(&WhenAllCallback::template on_future<0>, (future_callback)));
|
||||||
future2.then(tars::TC_Bind(&WhenAllCallback::template on_future<1>, tars::tc_shared(future_callback)));
|
future2.then(std::bind(&WhenAllCallback::template on_future<1>, (future_callback)));
|
||||||
future3.then(tars::TC_Bind(&WhenAllCallback::template on_future<2>, tars::tc_shared(future_callback)));
|
future3.then(std::bind(&WhenAllCallback::template on_future<2>, (future_callback)));
|
||||||
future4.then(tars::TC_Bind(&WhenAllCallback::template on_future<3>, tars::tc_shared(future_callback)));
|
future4.then(std::bind(&WhenAllCallback::template on_future<3>, (future_callback)));
|
||||||
return promise_all.getFuture();
|
return promise_all.getFuture();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,11 +230,11 @@ namespace tars
|
|||||||
|
|
||||||
PromiseAll promise_all;
|
PromiseAll promise_all;
|
||||||
std::shared_ptr<WhenAllCallback> future_callback(new WhenAllCallback(promise_all));
|
std::shared_ptr<WhenAllCallback> future_callback(new WhenAllCallback(promise_all));
|
||||||
future1.then(tars::TC_Bind(&WhenAllCallback::template on_future<0>, tars::tc_shared(future_callback)));
|
future1.then(std::bind(&WhenAllCallback::template on_future<0>, (future_callback)));
|
||||||
future2.then(tars::TC_Bind(&WhenAllCallback::template on_future<1>, tars::tc_shared(future_callback)));
|
future2.then(std::bind(&WhenAllCallback::template on_future<1>, (future_callback)));
|
||||||
future3.then(tars::TC_Bind(&WhenAllCallback::template on_future<2>, tars::tc_shared(future_callback)));
|
future3.then(std::bind(&WhenAllCallback::template on_future<2>, (future_callback)));
|
||||||
future4.then(tars::TC_Bind(&WhenAllCallback::template on_future<3>, tars::tc_shared(future_callback)));
|
future4.then(std::bind(&WhenAllCallback::template on_future<3>, (future_callback)));
|
||||||
future5.then(tars::TC_Bind(&WhenAllCallback::template on_future<4>, tars::tc_shared(future_callback)));
|
future5.then(std::bind(&WhenAllCallback::template on_future<4>, (future_callback)));
|
||||||
return promise_all.getFuture();
|
return promise_all.getFuture();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -249,12 +249,12 @@ namespace tars
|
|||||||
|
|
||||||
PromiseAll promise_all;
|
PromiseAll promise_all;
|
||||||
std::shared_ptr<WhenAllCallback> future_callback(new WhenAllCallback(promise_all));
|
std::shared_ptr<WhenAllCallback> future_callback(new WhenAllCallback(promise_all));
|
||||||
future1.then(tars::TC_Bind(&WhenAllCallback::template on_future<0>, tars::tc_shared(future_callback)));
|
future1.then(std::bind(&WhenAllCallback::template on_future<0>, (future_callback)));
|
||||||
future2.then(tars::TC_Bind(&WhenAllCallback::template on_future<1>, tars::tc_shared(future_callback)));
|
future2.then(std::bind(&WhenAllCallback::template on_future<1>, (future_callback)));
|
||||||
future3.then(tars::TC_Bind(&WhenAllCallback::template on_future<2>, tars::tc_shared(future_callback)));
|
future3.then(std::bind(&WhenAllCallback::template on_future<2>, (future_callback)));
|
||||||
future4.then(tars::TC_Bind(&WhenAllCallback::template on_future<3>, tars::tc_shared(future_callback)));
|
future4.then(std::bind(&WhenAllCallback::template on_future<3>, (future_callback)));
|
||||||
future5.then(tars::TC_Bind(&WhenAllCallback::template on_future<4>, tars::tc_shared(future_callback)));
|
future5.then(std::bind(&WhenAllCallback::template on_future<4>, (future_callback)));
|
||||||
future6.then(tars::TC_Bind(&WhenAllCallback::template on_future<5>, tars::tc_shared(future_callback)));
|
future6.then(std::bind(&WhenAllCallback::template on_future<5>, (future_callback)));
|
||||||
return promise_all.getFuture();
|
return promise_all.getFuture();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -269,13 +269,13 @@ namespace tars
|
|||||||
|
|
||||||
PromiseAll promise_all;
|
PromiseAll promise_all;
|
||||||
std::shared_ptr<WhenAllCallback> future_callback(new WhenAllCallback(promise_all));
|
std::shared_ptr<WhenAllCallback> future_callback(new WhenAllCallback(promise_all));
|
||||||
future1.then(tars::TC_Bind(&WhenAllCallback::template on_future<0>, tars::tc_shared(future_callback)));
|
future1.then(std::bind(&WhenAllCallback::template on_future<0>, (future_callback)));
|
||||||
future2.then(tars::TC_Bind(&WhenAllCallback::template on_future<1>, tars::tc_shared(future_callback)));
|
future2.then(std::bind(&WhenAllCallback::template on_future<1>, (future_callback)));
|
||||||
future3.then(tars::TC_Bind(&WhenAllCallback::template on_future<2>, tars::tc_shared(future_callback)));
|
future3.then(std::bind(&WhenAllCallback::template on_future<2>, (future_callback)));
|
||||||
future4.then(tars::TC_Bind(&WhenAllCallback::template on_future<3>, tars::tc_shared(future_callback)));
|
future4.then(std::bind(&WhenAllCallback::template on_future<3>, (future_callback)));
|
||||||
future5.then(tars::TC_Bind(&WhenAllCallback::template on_future<4>, tars::tc_shared(future_callback)));
|
future5.then(std::bind(&WhenAllCallback::template on_future<4>, (future_callback)));
|
||||||
future6.then(tars::TC_Bind(&WhenAllCallback::template on_future<5>, tars::tc_shared(future_callback)));
|
future6.then(std::bind(&WhenAllCallback::template on_future<5>, (future_callback)));
|
||||||
future7.then(tars::TC_Bind(&WhenAllCallback::template on_future<6>, tars::tc_shared(future_callback)));
|
future7.then(std::bind(&WhenAllCallback::template on_future<6>, (future_callback)));
|
||||||
return promise_all.getFuture();
|
return promise_all.getFuture();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -290,14 +290,14 @@ namespace tars
|
|||||||
|
|
||||||
PromiseAll promise_all;
|
PromiseAll promise_all;
|
||||||
std::shared_ptr<WhenAllCallback> future_callback(new WhenAllCallback(promise_all));
|
std::shared_ptr<WhenAllCallback> future_callback(new WhenAllCallback(promise_all));
|
||||||
future1.then(tars::TC_Bind(&WhenAllCallback::template on_future<0>, tars::tc_shared(future_callback)));
|
future1.then(std::bind(&WhenAllCallback::template on_future<0>, (future_callback)));
|
||||||
future2.then(tars::TC_Bind(&WhenAllCallback::template on_future<1>, tars::tc_shared(future_callback)));
|
future2.then(std::bind(&WhenAllCallback::template on_future<1>, (future_callback)));
|
||||||
future3.then(tars::TC_Bind(&WhenAllCallback::template on_future<2>, tars::tc_shared(future_callback)));
|
future3.then(std::bind(&WhenAllCallback::template on_future<2>, (future_callback)));
|
||||||
future4.then(tars::TC_Bind(&WhenAllCallback::template on_future<3>, tars::tc_shared(future_callback)));
|
future4.then(std::bind(&WhenAllCallback::template on_future<3>, (future_callback)));
|
||||||
future5.then(tars::TC_Bind(&WhenAllCallback::template on_future<4>, tars::tc_shared(future_callback)));
|
future5.then(std::bind(&WhenAllCallback::template on_future<4>, (future_callback)));
|
||||||
future6.then(tars::TC_Bind(&WhenAllCallback::template on_future<5>, tars::tc_shared(future_callback)));
|
future6.then(std::bind(&WhenAllCallback::template on_future<5>, (future_callback)));
|
||||||
future7.then(tars::TC_Bind(&WhenAllCallback::template on_future<6>, tars::tc_shared(future_callback)));
|
future7.then(std::bind(&WhenAllCallback::template on_future<6>, (future_callback)));
|
||||||
future8.then(tars::TC_Bind(&WhenAllCallback::template on_future<7>, tars::tc_shared(future_callback)));
|
future8.then(std::bind(&WhenAllCallback::template on_future<7>, (future_callback)));
|
||||||
return promise_all.getFuture();
|
return promise_all.getFuture();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -321,8 +321,9 @@ namespace tars
|
|||||||
|
|
||||||
for (i = 0; first != last; ++first, ++i)
|
for (i = 0; first != last; ++first, ++i)
|
||||||
{
|
{
|
||||||
first->then(tars::TC_Bind(&detail::VectorParallelCallback<T>::on_future,
|
std::shared_ptr<detail::VectorParallelCallback<T>> ptr(new detail::VectorParallelCallback<T>(when_all_callback, i));
|
||||||
tars::tc_owned(new detail::VectorParallelCallback<T>(when_all_callback, i))));
|
first->then(std::bind(&detail::VectorParallelCallback<T>::on_future, ptr));
|
||||||
|
// tars::tc_owned(new detail::VectorParallelCallback<T>(when_all_callback, i))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return promise_all.getFuture();
|
return promise_all.getFuture();
|
||||||
|
@ -27,6 +27,7 @@ namespace tars
|
|||||||
{
|
{
|
||||||
|
|
||||||
class BaseNotify;
|
class BaseNotify;
|
||||||
|
class Application;
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
/**
|
/**
|
||||||
* 每个对象的基类
|
* 每个对象的基类
|
||||||
@ -62,6 +63,18 @@ public:
|
|||||||
*/
|
*/
|
||||||
void setHandle(TC_EpollServer::Handle* handle);
|
void setHandle(TC_EpollServer::Handle* handle);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置全局的应用
|
||||||
|
* @param application
|
||||||
|
*/
|
||||||
|
void setApplication(Application *application);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取应用
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Application* getApplication() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取所属的Handle
|
* 获取所属的Handle
|
||||||
* @return HandlePtr&
|
* @return HandlePtr&
|
||||||
@ -166,6 +179,11 @@ protected:
|
|||||||
*/
|
*/
|
||||||
string _name;
|
string _name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 应用
|
||||||
|
*/
|
||||||
|
Application *_application;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 所属的Handle
|
* 所属的Handle
|
||||||
*/
|
*/
|
||||||
|
@ -41,10 +41,13 @@ typedef TC_AutoPtr<ServantHelperCreation> ServantHelperCreationPtr;
|
|||||||
/**
|
/**
|
||||||
* Servant
|
* Servant
|
||||||
*/
|
*/
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
struct ServantCreation : public ServantHelperCreation
|
struct ServantCreation : public ServantHelperCreation
|
||||||
{
|
{
|
||||||
ServantPtr create(const string &s) { T *p = new T; p->setName(s); return p; }
|
ServantCreation(Application *application) : _application(application){}
|
||||||
|
ServantPtr create(const string &s) { T *p = new T; p->setName(s); p->setApplication(_application); return p; }
|
||||||
|
Application *_application;
|
||||||
};
|
};
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
@ -69,14 +72,14 @@ public:
|
|||||||
* @param id
|
* @param id
|
||||||
*/
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void addServant(const string &id,bool check = false)
|
void addServant(const string &id, Application *application, bool check = false)
|
||||||
{
|
{
|
||||||
if(check && _servant_adapter.end() == _servant_adapter.find(id))
|
if(check && _servant_adapter.end() == _servant_adapter.find(id))
|
||||||
{
|
{
|
||||||
cerr<<"[TARS]ServantHelperManager::addServant "<< id <<" not find adapter.(maybe not conf in the web)"<<endl;
|
cerr<<"[TAF]ServantHelperManager::addServant "<< id <<" not find adapter.(maybe not conf in the web)"<<endl;
|
||||||
throw runtime_error("[TARS]ServantHelperManager::addServant " + id + " not find adapter.(maybe not conf in the web)");
|
throw runtime_error("[TAF]ServantHelperManager::addServant " + id + " not find adapter.(maybe not conf in the web)");
|
||||||
}
|
}
|
||||||
_servant_creator[id] = new ServantCreation<T>();
|
_servant_creator[id] = new ServantCreation<T>(application);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -99,14 +102,15 @@ public:
|
|||||||
* @param sAdapter
|
* @param sAdapter
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
string getAdapterServant(const string &sAdapter)
|
const string &getAdapterServant(const string &sAdapter) const
|
||||||
{
|
{
|
||||||
map<string, string>::iterator it = _adapter_servant.find(sAdapter);
|
static const string s = "(NO TARS PROTOCOL)";
|
||||||
|
auto it = _adapter_servant.find(sAdapter);
|
||||||
if(it != _adapter_servant.end())
|
if(it != _adapter_servant.end())
|
||||||
{
|
{
|
||||||
return it->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
return "(NO TARS PROTOCOL)";
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -114,21 +118,22 @@ public:
|
|||||||
* @param sServant
|
* @param sServant
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
string getServantAdapter(const string& sServant)
|
const string &getServantAdapter(const string& sServant) const
|
||||||
{
|
{
|
||||||
map<string, string>::iterator it = _servant_adapter.find(sServant);
|
static const string s = "";
|
||||||
|
|
||||||
|
auto it = _servant_adapter.find(sServant);
|
||||||
if(it != _servant_adapter.end())
|
if(it != _servant_adapter.end())
|
||||||
{
|
{
|
||||||
return it->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
return "";
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取Adapter/Servant对应表
|
* 获取Adapter/Servant对应表
|
||||||
* @return map<string, string>
|
* @return map<string, string>
|
||||||
*/
|
*/
|
||||||
map<string, string> getAdapterServant() {return _adapter_servant;}
|
const map<string, string> & getAdapterServant() const {return _adapter_servant;}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置染色信息
|
* 设置染色信息
|
||||||
@ -177,7 +182,7 @@ protected:
|
|||||||
/**
|
/**
|
||||||
* 锁
|
* 锁
|
||||||
*/
|
*/
|
||||||
TC_ThreadMutex _mutex;
|
TC_SpinLock _mutex;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否染色
|
* 是否染色
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
|
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
|
||||||
|
|
||||||
include_directories(${PROJECT_SOURCE_DIR}/include)
|
|
||||||
|
|
||||||
aux_source_directory(. DIR_SRCS)
|
aux_source_directory(. DIR_SRCS)
|
||||||
|
|
||||||
# if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
# if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
|
Loading…
Reference in New Issue
Block a user