增加后端渲染
This commit is contained in:
@@ -34,7 +34,7 @@ void fastweb::subscribe_manager::start()
|
|||||||
|
|
||||||
app()->router->other([&](network::http::request* request, network::http::response* response) {
|
app()->router->other([&](network::http::request* request, network::http::response* response) {
|
||||||
this->other(request, response);
|
this->other(request, response);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
bool fastweb::subscribe_manager::add(const std::string& pattern, const std::string& filepath)
|
bool fastweb::subscribe_manager::add(const std::string& pattern, const std::string& filepath)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -42,6 +42,11 @@ std::string module::codec::md5(const std::string& value)
|
|||||||
return ylib::codec::md5(value);
|
return ylib::codec::md5(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string module::codec::sha1(const std::string_view& value)
|
||||||
|
{
|
||||||
|
return ylib::codec::sha1(ylib::buffer(value.data(), value.length())).to_hex();
|
||||||
|
}
|
||||||
|
|
||||||
void module::codec::regist(sol::state* lua)
|
void module::codec::regist(sol::state* lua)
|
||||||
{
|
{
|
||||||
lua->new_usertype<module::codec>("fw_codec",
|
lua->new_usertype<module::codec>("fw_codec",
|
||||||
@@ -49,6 +54,7 @@ void module::codec::regist(sol::state* lua)
|
|||||||
"url_en", &module::codec::url_en,
|
"url_en", &module::codec::url_en,
|
||||||
"to_utf8", &module::codec::to_utf8,
|
"to_utf8", &module::codec::to_utf8,
|
||||||
"to_gbk", &module::codec::to_gbk,
|
"to_gbk", &module::codec::to_gbk,
|
||||||
"md5", &module::codec::md5
|
"md5", &module::codec::md5,
|
||||||
|
"sha1", &module::codec::sha1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ namespace module
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
static std::string md5(const std::string& value);
|
static std::string md5(const std::string& value);
|
||||||
|
|
||||||
|
static std::string sha1(const std::string_view& value);
|
||||||
|
|
||||||
static void regist(sol::state* lua);
|
static void regist(sol::state* lua);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ If you have any questions, please contact us: 1585346868@qq.com Or visit our web
|
|||||||
|
|
||||||
#include "response.h"
|
#include "response.h"
|
||||||
#include "net/http_reqpack.h"
|
#include "net/http_reqpack.h"
|
||||||
|
#include "util/codec.h"
|
||||||
module::response::response(network::http::response* response) :m_response(response)
|
module::response::response(network::http::response* response) :m_response(response)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -27,6 +27,45 @@ module::response::~response()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void module::response::set(const std::string& name, const std::string& value)
|
||||||
|
{
|
||||||
|
m_sets[name] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void module::response::sets(sol::table& lua_table)
|
||||||
|
{
|
||||||
|
// Lambda 表达式用于递归解析 Lua 表
|
||||||
|
auto parse_lua_table = [](const sol::table& table, auto& self) -> std::map<std::string, std::string> {
|
||||||
|
std::map<std::string, std::string> result;
|
||||||
|
for (const auto& pair : table) {
|
||||||
|
auto key = pair.first.as<std::string>();
|
||||||
|
sol::object value = pair.second;
|
||||||
|
|
||||||
|
if (value.get_type() == sol::type::table) {
|
||||||
|
// 如果是子表,递归解析并将子键展开
|
||||||
|
auto sub_table = self(value.as<sol::table>(), self);
|
||||||
|
for (const auto& sub_pair : sub_table) {
|
||||||
|
result[key + "." + sub_pair.first] = sub_pair.second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (value.get_type() == sol::type::string) {
|
||||||
|
// 如果是字符串
|
||||||
|
result[key] = value.as<std::string>();
|
||||||
|
}
|
||||||
|
else if (value.get_type() == sol::type::number) {
|
||||||
|
// 如果是数字,转换为字符串
|
||||||
|
result[key] = std::to_string(value.as<double>());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
std::cerr << "Unsupported Lua type for key: " << key << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
m_sets = parse_lua_table(lua_table, parse_lua_table);
|
||||||
|
}
|
||||||
|
|
||||||
void module::response::regist(sol::state* lua)
|
void module::response::regist(sol::state* lua)
|
||||||
{
|
{
|
||||||
// 绑定 Request 类到 Lua
|
// 绑定 Request 类到 Lua
|
||||||
@@ -37,7 +76,9 @@ void module::response::regist(sol::state* lua)
|
|||||||
"send_file", &module::response::send_file,
|
"send_file", &module::response::send_file,
|
||||||
"header", &module::response::header,
|
"header", &module::response::header,
|
||||||
"redirect", &module::response::redirect,
|
"redirect", &module::response::redirect,
|
||||||
"forward", &module::response::forward
|
"forward", &module::response::forward,
|
||||||
|
"set", &module::response::set,
|
||||||
|
"sets", &module::response::sets
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
bool module::response::send_data(const char* buf, size_t buf_len, ushort stateNum, const std::string& stateDesc)
|
bool module::response::send_data(const char* buf, size_t buf_len, ushort stateNum, const std::string& stateDesc)
|
||||||
@@ -54,7 +95,18 @@ bool module::response::sendex(const std::string& value, ushort stateNum, const s
|
|||||||
}
|
}
|
||||||
bool module::response::send_file(const std::string& filepath, int32 downbaud, ushort stateNum, const std::string& stateDesc)
|
bool module::response::send_file(const std::string& filepath, int32 downbaud, ushort stateNum, const std::string& stateDesc)
|
||||||
{
|
{
|
||||||
return m_response->send_file(filepath, downbaud, stateNum, stateDesc);
|
std::string end_filepath = system::temp_path() + "/" + codec::md5(filepath) + ".tmp";
|
||||||
|
|
||||||
|
if (m_sets.size() != 0 && ylib::file::size(filepath) < 1024 * 1024)
|
||||||
|
{
|
||||||
|
std::string data = ylib::file::read(filepath);
|
||||||
|
for_iter(iter, m_sets)
|
||||||
|
data = strutils::replace(data, "{" + iter->first + "}", iter->second);
|
||||||
|
ylib::file::write(end_filepath, data);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
end_filepath = filepath;
|
||||||
|
return m_response->send_file(end_filepath, downbaud, stateNum, stateDesc);
|
||||||
}
|
}
|
||||||
bool module::response::redirect(const std::string& filepath, bool MovedPermanently)
|
bool module::response::redirect(const std::string& filepath, bool MovedPermanently)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,9 +18,13 @@ namespace module
|
|||||||
bool redirect(const std::string& filepath, bool MovedPermanently = false);
|
bool redirect(const std::string& filepath, bool MovedPermanently = false);
|
||||||
bool forward(const std::string& filepath);
|
bool forward(const std::string& filepath);
|
||||||
void header(const std::string& name, const std::string& value);
|
void header(const std::string& name, const std::string& value);
|
||||||
|
|
||||||
|
void set(const std::string& name,const std::string& value);
|
||||||
|
void sets(sol::table& lua_table);
|
||||||
static void regist(sol::state* lua);
|
static void regist(sol::state* lua);
|
||||||
private:
|
private:
|
||||||
network::http::response* m_response = nullptr;
|
network::http::response* m_response = nullptr;
|
||||||
|
std::map<std::string, std::string> m_sets;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user