mirror of
https://gitee.com/an-tao/drogon.git
synced 2024-11-29 18:27:43 +08:00
replace bare pointers with shared_ptr in HttpReponse static methods;fix a delete bug
This commit is contained in:
parent
7b7a426f85
commit
1aaa65fff7
@ -150,7 +150,7 @@ void create_view::newViewHeaderFile(std::ofstream &file,const std::string &class
|
|||||||
file<<"using namespace drogon;\n";
|
file<<"using namespace drogon;\n";
|
||||||
file<<"class "<<className<<":public HttpView<"<<className<<">\n";
|
file<<"class "<<className<<":public HttpView<"<<className<<">\n";
|
||||||
file<<"{\npublic:\n\t"<<className<<"(){};\n\tvirtual ~"<<className<<"(){};\nprotected:\n\t"
|
file<<"{\npublic:\n\t"<<className<<"(){};\n\tvirtual ~"<<className<<"(){};\nprotected:\n\t"
|
||||||
"virtual HttpResponse* genHttpResponse(const HttpViewData&) override;\n};";
|
"virtual HttpResponsePtr genHttpResponse(const HttpViewData&) override;\n};";
|
||||||
}
|
}
|
||||||
|
|
||||||
void create_view::newViewSourceFile(std::ofstream &file,const std::string &className,std::ifstream &infile)
|
void create_view::newViewSourceFile(std::ofstream &file,const std::string &className,std::ifstream &infile)
|
||||||
@ -227,7 +227,7 @@ void create_view::newViewSourceFile(std::ofstream &file,const std::string &class
|
|||||||
//std::cout<<"file pos:"<<infile.tellg()<<std::endl;
|
//std::cout<<"file pos:"<<infile.tellg()<<std::endl;
|
||||||
|
|
||||||
std::string viewDataName=className+"_view_data";
|
std::string viewDataName=className+"_view_data";
|
||||||
file <<"HttpResponse* "<<className<<"::genHttpResponse(const HttpViewData& "<<viewDataName<<")\n{\n";
|
file <<"HttpResponsePtr "<<className<<"::genHttpResponse(const HttpViewData& "<<viewDataName<<")\n{\n";
|
||||||
//std::string bodyName=className+"_bodystr";
|
//std::string bodyName=className+"_bodystr";
|
||||||
std::string streamName=className+"_tmp_stream";
|
std::string streamName=className+"_tmp_stream";
|
||||||
|
|
||||||
|
@ -14,6 +14,6 @@ void JsonTestController::asyncHandleHttpRequest(const HttpRequest& req,std::func
|
|||||||
array.append(user);
|
array.append(user);
|
||||||
}
|
}
|
||||||
json["rows"]=array;
|
json["rows"]=array;
|
||||||
auto resp=std::unique_ptr<HttpResponse>(HttpResponse::newHttpJsonResponse(json));
|
auto resp=HttpResponse::newHttpJsonResponse(json);
|
||||||
callback(*resp);
|
callback(*resp);
|
||||||
}
|
}
|
@ -5,6 +5,6 @@ void ListParaCtl::asyncHandleHttpRequest(const HttpRequest& req,std::function<vo
|
|||||||
HttpViewData data;
|
HttpViewData data;
|
||||||
data.insert("title",std::string("list parameters"));
|
data.insert("title",std::string("list parameters"));
|
||||||
data.insert("parameters",req.getPremeter());
|
data.insert("parameters",req.getPremeter());
|
||||||
auto res=std::unique_ptr<drogon::HttpResponse>(drogon::HttpResponse::newHttpViewResponse("ListParaView.csp",data));
|
auto res=drogon::HttpResponse::newHttpViewResponse("ListParaView.csp",data);
|
||||||
callback(*res);
|
callback(*res);
|
||||||
}
|
}
|
@ -3,7 +3,7 @@ using namespace example;
|
|||||||
void TestController::asyncHandleHttpRequest(const HttpRequest& req,std::function<void (HttpResponse &)>callback)
|
void TestController::asyncHandleHttpRequest(const HttpRequest& req,std::function<void (HttpResponse &)>callback)
|
||||||
{
|
{
|
||||||
//write your application logic here
|
//write your application logic here
|
||||||
std::unique_ptr<HttpResponse> resp=std::unique_ptr<HttpResponse>(HttpResponse::newHttpResponse());
|
auto resp=HttpResponse::newHttpResponse();
|
||||||
LOG_DEBUG<<"!!!!!!!!!!1";
|
LOG_DEBUG<<"!!!!!!!!!!1";
|
||||||
resp->setStatusCode(HttpResponse::k200Ok);
|
resp->setStatusCode(HttpResponse::k200Ok);
|
||||||
resp->setContentTypeCode(CT_TEXT_HTML);
|
resp->setContentTypeCode(CT_TEXT_HTML);
|
||||||
|
@ -4,6 +4,6 @@ void TestViewCtl::asyncHandleHttpRequest(const HttpRequest& req,std::function<vo
|
|||||||
//write your application logic here
|
//write your application logic here
|
||||||
drogon::HttpViewData data;
|
drogon::HttpViewData data;
|
||||||
data.insert("title",std::string("TestView"));
|
data.insert("title",std::string("TestView"));
|
||||||
std::unique_ptr<HttpResponse> res=std::unique_ptr<HttpResponse>(drogon::HttpResponse::newHttpViewResponse("TestView",data));
|
auto res=drogon::HttpResponse::newHttpViewResponse("TestView",data);
|
||||||
callback(*res);
|
callback(*res);
|
||||||
}
|
}
|
@ -21,8 +21,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <drogon/HttpViewData.h>
|
#include <drogon/HttpViewData.h>
|
||||||
#include <string>
|
|
||||||
#include <json/json.h>
|
#include <json/json.h>
|
||||||
|
#include <string>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
using std::string;
|
using std::string;
|
||||||
#define CT_APPLICATION_JSON 1
|
#define CT_APPLICATION_JSON 1
|
||||||
@ -49,6 +50,8 @@ using std::string;
|
|||||||
|
|
||||||
namespace drogon
|
namespace drogon
|
||||||
{
|
{
|
||||||
|
class HttpResponse;
|
||||||
|
typedef std::shared_ptr<HttpResponse> HttpResponsePtr;
|
||||||
class HttpResponse
|
class HttpResponse
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -100,11 +103,11 @@ namespace drogon
|
|||||||
|
|
||||||
virtual std::string getBody() const=0;
|
virtual std::string getBody() const=0;
|
||||||
|
|
||||||
static HttpResponse* newHttpResponse();
|
static HttpResponsePtr newHttpResponse();
|
||||||
static HttpResponse* notFoundResponse();
|
static HttpResponsePtr notFoundResponse();
|
||||||
static HttpResponse* newHttpJsonResponse(const Json::Value &data);
|
static HttpResponsePtr newHttpJsonResponse(const Json::Value &data);
|
||||||
static HttpResponse* newHttpViewResponse(const std::string &viewName,const HttpViewData& data);
|
static HttpResponsePtr newHttpViewResponse(const std::string &viewName,const HttpViewData& data);
|
||||||
static HttpResponse* locationRedirectResponse(std::string path);
|
static HttpResponsePtr locationRedirectResponse(std::string path);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,13 +18,13 @@ namespace drogon
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
static HttpResponse* genHttpResponse(std::string viewName,const HttpViewData &data);
|
static HttpResponsePtr genHttpResponse(std::string viewName,const HttpViewData &data);
|
||||||
|
|
||||||
virtual ~HttpViewBase(){};
|
virtual ~HttpViewBase(){};
|
||||||
HttpViewBase(){};
|
HttpViewBase(){};
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
virtual HttpResponse* genHttpResponse(const HttpViewData&)=0;
|
virtual HttpResponsePtr genHttpResponse(const HttpViewData&)=0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,6 @@ class NotFound:public HttpView<NotFound>
|
|||||||
public:
|
public:
|
||||||
NotFound(){};
|
NotFound(){};
|
||||||
virtual ~NotFound(){};
|
virtual ~NotFound(){};
|
||||||
protected:
|
protected:
|
||||||
virtual HttpResponse* genHttpResponse(const HttpViewData&)override;
|
HttpResponsePtr genHttpResponse(const HttpViewData&) override;
|
||||||
};
|
};
|
@ -234,7 +234,7 @@ void HttpAppFrameworkImpl::onAsyncRequest(const HttpRequest& req,std::function<v
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto res=std::unique_ptr<drogon::HttpResponse>(drogon::HttpResponse::notFoundResponse());
|
auto res=drogon::HttpResponse::notFoundResponse();
|
||||||
|
|
||||||
if(needSetJsessionid)
|
if(needSetJsessionid)
|
||||||
res->addCookie("JSESSIONID",session_id);
|
res->addCookie("JSESSIONID",session_id);
|
||||||
@ -298,7 +298,7 @@ void HttpAppFrameworkImpl::readSendFile(const std::string& filePath,const HttpRe
|
|||||||
resp->setStatusCode(HttpResponse::k200Ok);
|
resp->setStatusCode(HttpResponse::k200Ok);
|
||||||
LOG_INFO << "file len:" << str.length();
|
LOG_INFO << "file len:" << str.length();
|
||||||
resp->setBody(str);
|
resp->setBody(str);
|
||||||
delete contents;
|
delete [] contents;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string HttpAppFrameworkImpl::getUuid()
|
std::string HttpAppFrameworkImpl::getUuid()
|
||||||
|
@ -187,7 +187,7 @@ namespace drogon
|
|||||||
headers_[field] = value;
|
headers_[field] = value;
|
||||||
transform(field.begin(), field.end(), field.begin(), ::tolower);
|
transform(field.begin(), field.end(), field.begin(), ::tolower);
|
||||||
if(field == "cookie") {
|
if(field == "cookie") {
|
||||||
LOG_INFO<<"cookies!!!:"<<value;
|
LOG_TRACE<<"cookies!!!:"<<value;
|
||||||
std::string::size_type pos;
|
std::string::size_type pos;
|
||||||
while((pos = value.find(";")) != std::string::npos) {
|
while((pos = value.find(";")) != std::string::npos) {
|
||||||
std::string coo = value.substr(0, pos);
|
std::string coo = value.substr(0, pos);
|
||||||
|
@ -25,17 +25,17 @@
|
|||||||
using namespace trantor;
|
using namespace trantor;
|
||||||
using namespace drogon;
|
using namespace drogon;
|
||||||
|
|
||||||
HttpResponse* HttpResponse::newHttpResponse()
|
HttpResponsePtr HttpResponse::newHttpResponse()
|
||||||
{
|
{
|
||||||
auto res = new HttpResponseImpl;
|
auto res = std::make_shared<HttpResponseImpl>();
|
||||||
res->setStatusCode(HttpResponse::k200Ok);
|
res->setStatusCode(HttpResponse::k200Ok);
|
||||||
res->setContentTypeCode(CT_TEXT_HTML);
|
res->setContentTypeCode(CT_TEXT_HTML);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpResponse* HttpResponse::newHttpJsonResponse(const Json::Value &data)
|
HttpResponsePtr HttpResponse::newHttpJsonResponse(const Json::Value &data)
|
||||||
{
|
{
|
||||||
auto res=new HttpResponseImpl;
|
auto res=std::make_shared<HttpResponseImpl>();
|
||||||
res->setStatusCode(HttpResponse::k200Ok);
|
res->setStatusCode(HttpResponse::k200Ok);
|
||||||
res->setContentTypeCode(CT_APPLICATION_JSON);
|
res->setContentTypeCode(CT_APPLICATION_JSON);
|
||||||
Json::StreamWriterBuilder builder;
|
Json::StreamWriterBuilder builder;
|
||||||
@ -44,7 +44,7 @@ HttpResponse* HttpResponse::newHttpJsonResponse(const Json::Value &data)
|
|||||||
res->setBody(writeString(builder, data));
|
res->setBody(writeString(builder, data));
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
HttpResponse* HttpResponse::notFoundResponse()
|
HttpResponsePtr HttpResponse::notFoundResponse()
|
||||||
{
|
{
|
||||||
HttpViewData data;
|
HttpViewData data;
|
||||||
data.insert("version",getVersion());
|
data.insert("version",getVersion());
|
||||||
@ -54,15 +54,15 @@ HttpResponse* HttpResponse::notFoundResponse()
|
|||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
HttpResponse* HttpResponse::locationRedirectResponse(std::string path)
|
HttpResponsePtr HttpResponse::locationRedirectResponse(std::string path)
|
||||||
{
|
{
|
||||||
auto res=new HttpResponseImpl;
|
auto res=std::make_shared<HttpResponseImpl>();
|
||||||
res->setStatusCode(HttpResponse::k302Found);
|
res->setStatusCode(HttpResponse::k302Found);
|
||||||
res->redirect(path.c_str());
|
res->redirect(path.c_str());
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
HttpResponse* HttpResponse::newHttpViewResponse(const std::string &viewName,const HttpViewData& data)
|
HttpResponsePtr HttpResponse::newHttpViewResponse(const std::string &viewName,const HttpViewData& data)
|
||||||
{
|
{
|
||||||
return HttpViewBase::genHttpResponse(viewName,data);
|
return HttpViewBase::genHttpResponse(viewName,data);
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
#include <trantor/utils/Logger.h>
|
#include <trantor/utils/Logger.h>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
using namespace drogon;
|
using namespace drogon;
|
||||||
HttpResponse* HttpViewBase::genHttpResponse(std::string viewName,const HttpViewData &data)
|
HttpResponsePtr HttpViewBase::genHttpResponse(std::string viewName,const HttpViewData &data)
|
||||||
{
|
{
|
||||||
LOG_TRACE<<"http view name="<<viewName;
|
LOG_TRACE<<"http view name="<<viewName;
|
||||||
auto pos=viewName.find(".csp");
|
auto pos=viewName.find(".csp");
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <set>
|
#include <set>
|
||||||
using namespace std;
|
using namespace std;
|
||||||
HttpResponse* NotFound::genHttpResponse(const HttpViewData& NotFound_view_data)
|
HttpResponsePtr NotFound::genHttpResponse(const HttpViewData& NotFound_view_data)
|
||||||
{
|
{
|
||||||
std::stringstream NotFound_tmp_stream;
|
std::stringstream NotFound_tmp_stream;
|
||||||
NotFound_tmp_stream << "<html>\n";
|
NotFound_tmp_stream << "<html>\n";
|
||||||
|
Loading…
Reference in New Issue
Block a user