Bladeren bron

增加后端渲染

xx 1 jaar geleden
bovenliggende
commit
3b58fec798
5 gewijzigde bestanden met toevoegingen van 69 en 5 verwijderingen
  1. 1 1
      src/core/subscribemanager.cpp
  2. 7 1
      src/module/codec.cpp
  3. 2 0
      src/module/codec.h
  4. 55 3
      src/module/http/response.cpp
  5. 4 0
      src/module/http/response.h

+ 1 - 1
src/core/subscribemanager.cpp

@@ -34,7 +34,7 @@ void fastweb::subscribe_manager::start()
 
 	app()->router->other([&](network::http::request* request, network::http::response* response) {
 		this->other(request, response);
-		});
+	});
 }
 bool fastweb::subscribe_manager::add(const std::string& pattern, const std::string& filepath)
 {

+ 7 - 1
src/module/codec.cpp

@@ -42,6 +42,11 @@ std::string module::codec::md5(const std::string& 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)
 {
     lua->new_usertype<module::codec>("fw_codec",
@@ -49,6 +54,7 @@ void module::codec::regist(sol::state* lua)
         "url_en", &module::codec::url_en,
         "to_utf8", &module::codec::to_utf8,
         "to_gbk", &module::codec::to_gbk,
-        "md5", &module::codec::md5
+        "md5", &module::codec::md5,
+        "sha1", &module::codec::sha1
     );
 }

+ 2 - 0
src/module/codec.h

@@ -30,6 +30,8 @@ namespace module
 		/// <returns></returns>
 		static std::string md5(const std::string& value);
 
+		static std::string sha1(const std::string_view& value);
+
 		static void regist(sol::state* lua);
 	};
 

+ 55 - 3
src/module/http/response.cpp

@@ -17,7 +17,7 @@ If you have any questions, please contact us: 1585346868@qq.com Or visit our web
 
 #include "response.h"
 #include "net/http_reqpack.h"
-
+#include "util/codec.h"
 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)
 {
     // 绑定 Request 类到 Lua
@@ -37,7 +76,9 @@ void module::response::regist(sol::state* lua)
         "send_file", &module::response::send_file,
         "header", &module::response::header,
         "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)
@@ -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)
 {
-    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)
 {

+ 4 - 0
src/module/http/response.h

@@ -18,9 +18,13 @@ namespace module
         bool redirect(const std::string& filepath, bool MovedPermanently = false);
         bool forward(const std::string& filepath);
         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);
     private:
         network::http::response* m_response = nullptr;
+        std::map<std::string, std::string> m_sets;
     };
 }