mirror of
https://gitee.com/an-tao/drogon.git
synced 2024-11-30 02:37:57 +08:00
modify definitation of any
This commit is contained in:
parent
567bd65955
commit
50bbd2d946
@ -113,6 +113,7 @@ int main()
|
||||
drogon::HttpAppFramework::registerHttpApiMethod("/api/v1/handle4/{4}/{3}/{1}",func);
|
||||
|
||||
//start app framework
|
||||
//drogon::HttpAppFramework::instance().enableDynamicSharedLibLoading();
|
||||
drogon::HttpAppFramework::instance().run();
|
||||
|
||||
}
|
||||
|
@ -79,5 +79,6 @@ namespace drogon
|
||||
virtual const std::string & getDocumentRoot() const =0;
|
||||
virtual void setDocumentRoot(const std::string &rootPath)=0;
|
||||
virtual void setFileTypes(const std::vector<std::string> &types)=0;
|
||||
virtual void enableDynamicSharedLibLoading(const std::string &viewPth="views")=0;
|
||||
};
|
||||
}
|
||||
|
@ -18,14 +18,14 @@
|
||||
#ifdef USE_STD_ANY
|
||||
|
||||
#include <any>
|
||||
typedef std::any Any;
|
||||
#define Any_cast std::any_cast
|
||||
using std::any;
|
||||
using std::any_cast;
|
||||
|
||||
#elif USE_BOOST
|
||||
|
||||
#include <boost/any.hpp>
|
||||
typedef boost::any Any;
|
||||
#define Any_cast boost::any_cast
|
||||
using boost::any;
|
||||
using boost::any_cast;
|
||||
|
||||
#else
|
||||
#error,must use c++17 or boost
|
||||
@ -35,7 +35,7 @@ typedef boost::any Any;
|
||||
#include <unordered_map>
|
||||
#include <string>
|
||||
|
||||
typedef std::unordered_map<std::string,Any> ViewDataMap;
|
||||
typedef std::unordered_map<std::string,any> ViewDataMap;
|
||||
namespace drogon
|
||||
{
|
||||
class HttpViewData
|
||||
@ -48,7 +48,7 @@ public:
|
||||
if(it!=viewData_.end())
|
||||
{
|
||||
try {
|
||||
return Any_cast<T>(it->second);
|
||||
return any_cast<T>(it->second);
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
@ -58,11 +58,11 @@ public:
|
||||
T tmp;
|
||||
return tmp;
|
||||
}
|
||||
void insert(const std::string& key,Any &&obj)
|
||||
void insert(const std::string& key,any &&obj)
|
||||
{
|
||||
viewData_[key]=std::move(obj);
|
||||
}
|
||||
void insert(const std::string& key,const Any &obj)
|
||||
void insert(const std::string& key,const any &obj)
|
||||
{
|
||||
viewData_[key]=obj;
|
||||
}
|
||||
|
@ -21,20 +21,20 @@
|
||||
#ifdef USE_STD_ANY
|
||||
|
||||
#include <any>
|
||||
typedef std::any Any;
|
||||
#define Any_cast std::any_cast
|
||||
using std::any;
|
||||
using std::any_cast;
|
||||
|
||||
#elif USE_BOOST
|
||||
|
||||
#include <boost/any.hpp>
|
||||
typedef boost::any Any;
|
||||
#define Any_cast boost::any_cast
|
||||
using boost::any;
|
||||
using boost::any_cast;
|
||||
|
||||
#else
|
||||
#error,must use c++17 or boost
|
||||
#endif
|
||||
|
||||
typedef std::map<std::string,Any> SessionMap;
|
||||
typedef std::map<std::string,any> SessionMap;
|
||||
namespace drogon
|
||||
{
|
||||
class Session
|
||||
@ -45,21 +45,21 @@ namespace drogon
|
||||
auto it=sessionMap_.find(key);
|
||||
if(it!=sessionMap_.end())
|
||||
{
|
||||
return Any_cast<T>(it->second);
|
||||
return any_cast<T>(it->second);
|
||||
}
|
||||
T tmp;
|
||||
return tmp;
|
||||
};
|
||||
Any &operator[](const std::string &key){
|
||||
any &operator[](const std::string &key){
|
||||
std::lock_guard<std::mutex> lck(mutex_);
|
||||
return sessionMap_[key];
|
||||
};
|
||||
void insert(const std::string& key,const Any &obj)
|
||||
void insert(const std::string& key,const any &obj)
|
||||
{
|
||||
std::lock_guard<std::mutex> lck(mutex_);
|
||||
sessionMap_[key]=obj;
|
||||
};
|
||||
void insert(const std::string& key,Any &&obj)
|
||||
void insert(const std::string& key,any &&obj)
|
||||
{
|
||||
std::lock_guard<std::mutex> lck(mutex_);
|
||||
sessionMap_[key]=std::move(obj);
|
||||
|
@ -11,6 +11,7 @@
|
||||
* @section DESCRIPTION
|
||||
*
|
||||
*/
|
||||
#include "SharedLibManager.h"
|
||||
#include "Utilities.h"
|
||||
#include "HttpRequestImpl.h"
|
||||
#include "HttpResponseImpl.h"
|
||||
@ -51,6 +52,7 @@ namespace drogon
|
||||
virtual const std::string & getDocumentRoot() const override {return _rootPath;}
|
||||
virtual void setDocumentRoot(const std::string &rootPath) override {_rootPath=rootPath;}
|
||||
virtual void setFileTypes(const std::vector<std::string> &types) override;
|
||||
virtual void enableDynamicSharedLibLoading(const std::string &viewPth="views") override;
|
||||
~HttpAppFrameworkImpl(){}
|
||||
private:
|
||||
std::vector<std::pair<std::string,uint16_t>> _listeners;
|
||||
@ -100,7 +102,7 @@ namespace drogon
|
||||
std::set<std::string> _fileTypeSet={"html","jpg"};
|
||||
std::string _rootPath=".";
|
||||
|
||||
|
||||
std::atomic_bool _running=false;
|
||||
|
||||
//tool funcs
|
||||
|
||||
@ -109,11 +111,25 @@ namespace drogon
|
||||
|
||||
|
||||
size_t _threadNum=1;
|
||||
std::string _viewFilePath;
|
||||
|
||||
std::unique_ptr<SharedLibManager>_sharedLibManagerPtr;
|
||||
|
||||
trantor::EventLoop _loop;
|
||||
};
|
||||
}
|
||||
|
||||
using namespace drogon;
|
||||
using namespace std::placeholders;
|
||||
void HttpAppFrameworkImpl::enableDynamicSharedLibLoading(const std::string &viewPath)
|
||||
{
|
||||
assert(!_running);
|
||||
if(_viewFilePath.empty())
|
||||
{
|
||||
_viewFilePath=_rootPath+"/"+viewPath;
|
||||
_sharedLibManagerPtr=std::unique_ptr<SharedLibManager>(new SharedLibManager(&_loop,_viewFilePath));
|
||||
}
|
||||
}
|
||||
void HttpAppFrameworkImpl::setFileTypes(const std::vector<std::string> &types)
|
||||
{
|
||||
for(auto type : types)
|
||||
@ -226,12 +242,14 @@ void HttpAppFrameworkImpl::setThreadNum(size_t threadNum)
|
||||
}
|
||||
void HttpAppFrameworkImpl::addListener(const std::string &ip, uint16_t port)
|
||||
{
|
||||
assert(!_running);
|
||||
_listeners.push_back(std::make_pair(ip,port));
|
||||
}
|
||||
|
||||
void HttpAppFrameworkImpl::run()
|
||||
{
|
||||
//
|
||||
_running=true;
|
||||
std::vector<std::shared_ptr<HttpServer>> servers;
|
||||
std::vector<std::shared_ptr<EventLoopThread>> loopThreads;
|
||||
initRegex();
|
||||
@ -263,9 +281,9 @@ void HttpAppFrameworkImpl::run()
|
||||
interval=_sessionTimeout/1000;
|
||||
limit=_sessionTimeout;
|
||||
}
|
||||
trantor::EventLoop loop;
|
||||
_sessionMapPtr=std::unique_ptr<CacheMap<std::string,SessionPtr>>(new CacheMap<std::string,SessionPtr>(&loop,interval,limit));
|
||||
loop.loop();
|
||||
|
||||
_sessionMapPtr=std::unique_ptr<CacheMap<std::string,SessionPtr>>(new CacheMap<std::string,SessionPtr>(&_loop,interval,limit));
|
||||
_loop.loop();
|
||||
}
|
||||
|
||||
bool HttpAppFrameworkImpl::doFilters(const std::vector<std::string> &filters,
|
||||
|
@ -83,7 +83,7 @@ void HttpServer::onConnection(const TcpConnectionPtr& conn)
|
||||
void HttpServer::onMessage(const TcpConnectionPtr& conn,
|
||||
MsgBuffer* buf)
|
||||
{
|
||||
HttpContext* context = Any_cast<HttpContext>(conn->getMutableContext());
|
||||
HttpContext* context = any_cast<HttpContext>(conn->getMutableContext());
|
||||
|
||||
// LOG_INFO << "###:" << string(buf->peek(), buf->readableBytes());
|
||||
if (!context->parseRequest(buf)) {
|
||||
|
30
lib/src/SharedLibManager.cc
Executable file
30
lib/src/SharedLibManager.cc
Executable file
@ -0,0 +1,30 @@
|
||||
/**
|
||||
*
|
||||
* @file
|
||||
* @author An Tao
|
||||
* @section LICENSE
|
||||
*
|
||||
* Copyright 2018, An Tao. All rights reserved.
|
||||
* Use of this source code is governed by a MIT license
|
||||
* that can be found in the License file.
|
||||
*
|
||||
* @section DESCRIPTION
|
||||
*
|
||||
*/
|
||||
|
||||
#include "SharedLibManager.h"
|
||||
#include <trantor/utils/Logger.h>
|
||||
|
||||
using namespace drogon;
|
||||
SharedLibManager::SharedLibManager(trantor::EventLoop *loop,const std::string viewPath):
|
||||
_loop(loop),
|
||||
_viewPath(viewPath)
|
||||
{
|
||||
_loop->runEvery(5.0,[=](){
|
||||
managerLibs();
|
||||
});
|
||||
}
|
||||
void SharedLibManager::managerLibs()
|
||||
{
|
||||
//LOG_DEBUG<<"manager .so libs in path "<<_viewPath;
|
||||
}
|
29
lib/src/SharedLibManager.h
Executable file
29
lib/src/SharedLibManager.h
Executable file
@ -0,0 +1,29 @@
|
||||
/**
|
||||
*
|
||||
* @file
|
||||
* @author An Tao
|
||||
* @section LICENSE
|
||||
*
|
||||
* Copyright 2018, An Tao. All rights reserved.
|
||||
* Use of this source code is governed by a MIT license
|
||||
* that can be found in the License file.
|
||||
*
|
||||
* @section DESCRIPTION
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <trantor/utils/NonCopyable.h>
|
||||
#include <trantor/net/EventLoop.h>
|
||||
namespace drogon{
|
||||
class SharedLibManager:public trantor::NonCopyable
|
||||
{
|
||||
public:
|
||||
SharedLibManager(trantor::EventLoop *loop,const std::string viewPath);
|
||||
~SharedLibManager(){}
|
||||
private:
|
||||
void managerLibs();
|
||||
trantor::EventLoop *_loop;
|
||||
std::string _viewPath;
|
||||
};
|
||||
}
|
2
trantor
2
trantor
@ -1 +1 @@
|
||||
Subproject commit 8cafcd2ab9720ac21f4cd0af9b3af3ea79385d3b
|
||||
Subproject commit 3028e451c7d81a2e7301d7013a2166003f9cabe1
|
Loading…
Reference in New Issue
Block a user