xx %!s(int64=2) %!d(string=hai) anos
pai
achega
f8b55f862b

+ 0 - 63
.gitattributes

@@ -1,63 +0,0 @@
-###############################################################################
-# Set default behavior to automatically normalize line endings.
-###############################################################################
-* text=auto
-
-###############################################################################
-# Set default behavior for command prompt diff.
-#
-# This is need for earlier builds of msysgit that does not have it on by
-# default for csharp files.
-# Note: This is only used by command line
-###############################################################################
-#*.cs     diff=csharp
-
-###############################################################################
-# Set the merge driver for project and solution files
-#
-# Merging from the command prompt will add diff markers to the files if there
-# are conflicts (Merging from VS is not affected by the settings below, in VS
-# the diff markers are never inserted). Diff markers may cause the following 
-# file extensions to fail to load in VS. An alternative would be to treat
-# these files as binary and thus will always conflict and require user
-# intervention with every merge. To do so, just uncomment the entries below
-###############################################################################
-#*.sln       merge=binary
-#*.csproj    merge=binary
-#*.vbproj    merge=binary
-#*.vcxproj   merge=binary
-#*.vcproj    merge=binary
-#*.dbproj    merge=binary
-#*.fsproj    merge=binary
-#*.lsproj    merge=binary
-#*.wixproj   merge=binary
-#*.modelproj merge=binary
-#*.sqlproj   merge=binary
-#*.wwaproj   merge=binary
-
-###############################################################################
-# behavior for image files
-#
-# image files are treated as binary by default.
-###############################################################################
-#*.jpg   binary
-#*.png   binary
-#*.gif   binary
-
-###############################################################################
-# diff behavior for common document formats
-# 
-# Convert binary document formats to text before diffing them. This feature
-# is only available from the command line. Turn it on by uncommenting the 
-# entries below.
-###############################################################################
-#*.doc   diff=astextplain
-#*.DOC   diff=astextplain
-#*.docx  diff=astextplain
-#*.DOCX  diff=astextplain
-#*.dot   diff=astextplain
-#*.DOT   diff=astextplain
-#*.pdf   diff=astextplain
-#*.PDF   diff=astextplain
-#*.rtf   diff=astextplain
-#*.RTF   diff=astextplain

+ 1 - 4
.gitignore

@@ -2,7 +2,4 @@
 # 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。
 ################################################################################
 
-/.vs
-/session
-/obj
-/bin
+/build

+ 14 - 14
3rdparty/ylib/include/db/mssql.h

@@ -19,7 +19,7 @@ namespace ylib::mssql
     class prepare_statement;
     struct mssql_conn_info
     {
-        mssql_conn_info(){
+        mssql_conn_info() {
         }
         std::string odbcname;
         std::string username;
@@ -68,19 +68,19 @@ namespace ylib::mssql
         std::map<std::string, short> m_field_name_index;
     };
 
-    class prepare_statement:public ylib::error_base{
+    class prepare_statement :public ylib::error_base {
     public:
         prepare_statement();
         ~prepare_statement();
-        void set_boolean(uint32 index,bool value);
-        void set_datetime(uint32 index,const std::string& value);
-        void set_double(uint32 index,double value);
-        void set_int32(uint32 index,int32 value);
-        void set_uint32(uint32 index,uint32 value);
-        void set_int64(uint32 index,int64 value);
-        void set_uint64(uint32 index,uint64 value);
+        void set_boolean(uint32 index, bool value);
+        void set_datetime(uint32 index, const std::string& value);
+        void set_double(uint32 index, double value);
+        void set_int32(uint32 index, int32 value);
+        void set_uint32(uint32 index, uint32 value);
+        void set_int64(uint32 index, int64 value);
+        void set_uint64(uint32 index, uint64 value);
         void set_null(uint32 index);
-        void set_string(uint32 index,const std::string& value);
+        void set_string(uint32 index, const std::string& value);
         void clear();
         uint64 update();
         ylib::mssql::result* query();
@@ -90,12 +90,12 @@ namespace ylib::mssql
         ylib::mssql::result* m_result = nullptr;
         void* m_handle = nullptr;
     };
-    class conn :public ylib::example<ylib::mssql::mssql_conn_info>,public ylib::error_base
+    class conn :public ylib::example<ylib::mssql::mssql_conn_info>, public ylib::error_base
     {
     public:
         conn();
         ~conn();
-        virtual EXAMPLE_START_RESULT start(const ylib::mssql::mssql_conn_info&info) override;
+        virtual EXAMPLE_START_RESULT start(const ylib::mssql::mssql_conn_info& info) override;
         virtual void close() override;
 
 
@@ -110,14 +110,14 @@ namespace ylib::mssql
         void rollback();
         friend class ylib::mssql::pool;
     private:
-        void *m_handle = nullptr;
+        void* m_handle = nullptr;
         ylib::mssql::mssql_conn_info m_info;
         class prepare_statement* m_ppst = nullptr;
         int m_sw = 0;
     };
 
 
-    class pool: public ylib::pool<ylib::mssql::conn, ylib::mssql::mssql_conn_info>
+    class pool : public ylib::pool<ylib::mssql::conn, ylib::mssql::mssql_conn_info>
     {
     public:
         pool();

+ 17 - 17
3rdparty/ylib/include/db/mysql.h

@@ -17,14 +17,14 @@ namespace ylib::mysql
     class result;
     class conn;
     class prepare_statement;
-    struct field{
+    struct field {
         uint32 index = 0;
         std::string name;
         std::string type_name;
     };
     struct mysql_conn_info
     {
-        mysql_conn_info(){
+        mysql_conn_info() {
             port = 0;
         }
         std::string ipaddress;
@@ -81,21 +81,21 @@ namespace ylib::mysql
         std::vector<ylib::mysql::field> m_fields;
     };
 
-    class prepare_statement:public ylib::error_base{
+    class prepare_statement :public ylib::error_base {
     public:
         prepare_statement();
         ~prepare_statement();
-        void set_bigint(uint32 index,const std::string& value);
-        void set_boolean(uint32 index,bool value);
-        void set_datetime(uint32 index,const std::string& value);
-        void set_double(uint32 index,double value);
-        void set_int32(uint32 index,int32 value);
-        void set_uint32(uint32 index,uint32 value);
-        void set_int64(uint32 index,int64 value);
-        void set_uint64(uint32 index,uint64 value);
+        void set_bigint(uint32 index, const std::string& value);
+        void set_boolean(uint32 index, bool value);
+        void set_datetime(uint32 index, const std::string& value);
+        void set_double(uint32 index, double value);
+        void set_int32(uint32 index, int32 value);
+        void set_uint32(uint32 index, uint32 value);
+        void set_int64(uint32 index, int64 value);
+        void set_uint64(uint32 index, uint64 value);
         void set_null(uint32 index);
-        void set_string(uint32 index,const std::string& value);
-        void set_blob(uint32 index,const ylib::buffer& value);
+        void set_string(uint32 index, const std::string& value);
+        void set_blob(uint32 index, const ylib::buffer& value);
         void clear();
         uint64 update();
         ylib::mysql::result* query();
@@ -105,12 +105,12 @@ namespace ylib::mysql
         ylib::mysql::result* m_result = nullptr;
         void* m_handle = nullptr;
     };
-    class conn :public ylib::example<ylib::mysql::mysql_conn_info>,public ylib::error_base
+    class conn :public ylib::example<ylib::mysql::mysql_conn_info>, public ylib::error_base
     {
     public:
         conn();
         ~conn();
-        virtual EXAMPLE_START_RESULT start(const ylib::mysql::mysql_conn_info&info) override;
+        virtual EXAMPLE_START_RESULT start(const ylib::mysql::mysql_conn_info& info) override;
         virtual void close() override;
 
 
@@ -130,7 +130,7 @@ namespace ylib::mysql
 
         friend class ylib::mysql::pool;
     private:
-        void *m_handle = nullptr;
+        void* m_handle = nullptr;
         ylib::mysql::mysql_conn_info m_info;
         class prepare_statement* m_ppst = nullptr;
         // 事务状态 0=未开启 1=已开启 2=执行完毕
@@ -138,7 +138,7 @@ namespace ylib::mysql
     };
 
 
-    class pool: public ylib::pool<ylib::mysql::conn, ylib::mysql::mysql_conn_info>
+    class pool : public ylib::pool<ylib::mysql::conn, ylib::mysql::mysql_conn_info>
     {
     public:
         pool()

+ 7 - 62
3rdparty/ylib/include/db/sqler.h

@@ -21,7 +21,7 @@ namespace ylib
 	};
 	struct order_by {
 		std::string field;
-		sort sort;
+		ylib::sort sort;
 	};
 	struct keyvalue {
 		std::string name;
@@ -31,7 +31,7 @@ namespace ylib
 	/// <summary>
 	/// MYSQL SELECT 查询器
 	/// </summary>
-	class select:public ylib::error_base {
+	class select :public ylib::error_base {
 	public:
 		select(mysql::conn* conn);
 		~select();
@@ -51,11 +51,11 @@ namespace ylib
 		/// <summary>
 		/// 条件[A=B]
 		/// </summary>
-		select& where(const std::string& name,const std::string& expression,const std::any& value);
+		select& where(const std::string& name, const std::string& expression, const std::any& value);
 		/// <summary>
 		/// 条件[模糊查询]
 		/// </summary>
-		select& where_like(const std::string& name,const std::string& value);
+		select& where_like(const std::string& name, const std::string& value);
 		/// <summary>
 		/// 条件[自定义]
 		/// </summary>
@@ -63,7 +63,7 @@ namespace ylib
 		/// <summary>
 		/// LIMIT[页]
 		/// </summary>
-		select& page(uint32 page,uint32 count);
+		select& page(uint32 page, uint32 count);
 		/// <summary>
 		/// LIMIT
 		/// </summary>
@@ -96,7 +96,7 @@ namespace ylib
 		/// <param name="where"></param>
 		/// <param name="orderby"></param>
 		/// <param name="limit"></param>
-		void make_sql(std::string& field_name,std::string& where,std::string& orderby,std::string& limit,std::vector<std::any>& insert_values);
+		void make_sql(std::string& field_name, std::string& where, std::string& orderby, std::string& limit, std::vector<std::any>& insert_values);
 	private:
 		mysql::conn* m_conn = nullptr;
 		std::vector<ylib::where> m_wheres;
@@ -106,18 +106,6 @@ namespace ylib
 		order_by m_orderby;
 
 	};
-#if 0
-	class Lselect :public ylib::select {
-	public:
-		Lselect(void* conn);
-		~Lselect();
-		void where_i32(const std::string& name, const std::string& expression,int32 value);
-		void where_i64(const std::string& name, const std::string& expression,int64 value);
-		void where_dob(const std::string& name, const std::string& expression,double value);
-		void where_str(const std::string& name, const std::string& expression, const std::string& value);
-		void where_expression(const std::string& expression);
-	};
-#endif
 	/// <summary>
 	/// MYSQL UPDATE
 	/// </summary>
@@ -189,26 +177,6 @@ namespace ylib
 		order_by m_orderby;
 
 	};
-#if 0
-	class Lupdate :public ylib::update {
-	public:
-		Lupdate(mysql::conn* conn);
-		~Lupdate();
-
-		void set_i32(const std::string& name, int32 value);
-		void set_i64(const std::string& name, int64 value);
-		void set_dob(const std::string& name, double value);
-		void set_str(const std::string& name, const std::string& value);
-
-		void where_i32(const std::string& name, const std::string& expression, int32 value);
-		void where_i64(const std::string& name, const std::string& expression, int64 value);
-		void where_dob(const std::string& name, const std::string& expression, double value);
-		void where_str(const std::string& name, const std::string& expression, const std::string& value);
-
-		void where_expression(const std::string& expression);
-	};
-
-#endif
 	/// <summary>
 	/// MYSQL INSERT
 	/// </summary>
@@ -236,17 +204,6 @@ namespace ylib
 		std::string m_table_name;
 		std::vector<keyvalue> m_sets;
 	};
-#if 0
-	class Linsert :public ylib::insert {
-	public:
-		Linsert(mysql::conn* conn);
-		~Linsert();
-		void i32(const std::string& name, int32 value);
-		void i64(const std::string& name, int64 value);
-		void dob(const std::string& name, double value);
-		void str(const std::string& name, const std::string& value);
-	};
-#endif
 	/// <summary>
 	/// MYSQL DELETE
 	/// </summary>
@@ -304,16 +261,4 @@ namespace ylib
 		order_by m_orderby;
 
 	};
-#if 0
-	class Ldelete :public ylib::delete_ {
-	public:
-		Ldelete(mysql::conn* conn);
-		~Ldelete(); 
-		void where_i32(const std::string& name, const std::string& expression, int32 value);
-		void where_i64(const std::string& name, const std::string& expression, int64 value);
-		void where_dob(const std::string& name, const std::string& expression, double value);
-		void where_str(const std::string& name, const std::string& expression, const std::string& value);
-		void where_expression(const std::string& expression);
-	};
-#endif
-}
+}

+ 6 - 3
3rdparty/ylib/include/net/http_router.h

@@ -36,7 +36,7 @@ namespace ylib
                 // 请求类型
                 network::http::method method;
                 // 回调函数
-                std::function<void(network::http::request*, network::http::response*)> callback;
+                std::function<void(network::http::request*, network::http::response*,void *extra)> callback;
                 // 控制器。为控制器则启动下面两个属性
                 bool controller;
                 // 创建控制器类指针
@@ -49,6 +49,8 @@ namespace ylib
                 // LUA虚拟机初始化回调
                 std::function<void(sol::state& state)> lua_init_state;
 #endif
+                // 附加数据
+                void* extra = nullptr;
             };
             /*************************************************************************
              * class:路由中专服务
@@ -94,9 +96,10 @@ namespace ylib
                  *      同一地址不允许订阅两次
                  ******************************************************************/
                 void subscribe(
-                    const std::string& path,
+                    const std::string& path, 
                     network::http::method method,
-                    std::function<void(network::http::request*, network::http::response*)> callback
+                    std::function<void(network::http::request*, network::http::response*, void*)> callback,
+                    void* extra = nullptr
                 );
 #define SUBSCRIBE(ROUTER,CONTROLLER,FUNCTION,PATH,METHOD) ROUTER->subscribe([]()->void*{return new CONTROLLER;},(ylib::network::http::HTTP_CTR_FUNCTION)&CONTROLLER::FUNCTION,PATH,METHOD)
 

+ 138 - 0
CMakeLists.txt

@@ -0,0 +1,138 @@
+cmake_minimum_required(VERSION 3.5)
+project("fastweb")
+
+# 设置自定义配置类型
+if(MSVC)
+	set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Build config types" FORCE)
+endif()
+# C++等级
+set(CMAKE_CXX_STANDARD 20)
+set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
+# 警告等级
+
+# Recursively get all source files
+file(GLOB_RECURSE SOURCE_FILES
+    "${PROJECT_SOURCE_DIR}/src/*.cpp"
+)
+file(GLOB_RECURSE HEADER_FILES
+    "${PROJECT_SOURCE_DIR}/src/*.h"
+)
+foreach(source IN LISTS SOURCE_FILES)
+    get_filename_component(source_path "${source}" PATH)
+    file(RELATIVE_PATH source_path_rel "${PROJECT_SOURCE_DIR}" "${source_path}")
+    string(REPLACE "/" "\\" source_path_rel_win "${source_path_rel}") 
+    source_group(${source_path_rel_win} FILES "${source}")
+endforeach()
+foreach(header IN LISTS HEADER_FILES)
+    get_filename_component(header_path "${header}" PATH)
+    file(RELATIVE_PATH header_path_rel "${PROJECT_SOURCE_DIR}" "${header_path}")
+    string(REPLACE "/" "\\" header_path_rel_win "${header_path_rel}")
+    source_group(${header_path_rel_win} FILES "${header}")
+endforeach()
+
+
+include_directories(${PROJECT_SOURCE_DIR}/src)
+if(MSVC)
+	include_directories(${PROJECT_SOURCE_DIR}/src)
+    include_directories(${PROJECT_SOURCE_DIR}/3rdparty)
+	include_directories(${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Windows/Include)
+	include_directories(${PROJECT_SOURCE_DIR}/3rdparty/lua)
+	include_directories(${PROJECT_SOURCE_DIR}/3rdparty/soci/include)
+	include_directories(${PROJECT_SOURCE_DIR}/3rdparty/mysql/include/jdbc)
+	include_directories(${PROJECT_SOURCE_DIR}/3rdparty/ylib/include)
+	add_compile_options(/W3 /wd4819)
+else()
+    include_directories(${PROJECT_SOURCE_DIR}/3rdparty)
+    include_directories(/usr/include/lua5.4/)
+endif()
+
+
+# Add the executable or library target
+add_executable(${PROJECT_NAME} ${SOURCE_FILES}  ${HEADER_FILES})
+link_directories(/usr/lib/x86_64-linux-gnu)
+link_directories(/usr/local/lib)
+
+
+if(MSVC)
+	target_link_libraries(${PROJECT_NAME} 
+		odbc32.lib
+		User32.lib
+		Advapi32.lib
+		IPHLPAPI.lib
+		WS2_32.lib
+		Shell32.lib
+		${PROJECT_SOURCE_DIR}/3rdparty/libcrypto_static.lib
+		
+		$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Lib/HPSocket_D.lib>
+		$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/mysql/lib/Debug/mysqlcppconn.lib>
+		$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/ylib/lib/Debug/leveldb.lib>
+		$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/ylib/lib/Debug/libzip.lib>
+		$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/ylib/lib/Debug/lua.lib>
+		$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/ylib/lib/Debug/sqlite3.lib>
+		$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/ylib/lib/Debug/ylib.lib>
+		$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/ylib/lib/Debug/zlib.lib>
+		$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Debug/libsoci_core_4_1.lib>
+		$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Debug/libsoci_empty_4_1.lib>
+		$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Debug/libsoci_odbc_4_1.lib>
+		$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Debug/soci_core_4_1.lib>
+		$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Debug/soci_empty_4_1.lib>
+		$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Debug/soci_odbc_4_1.lib>
+		
+		$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Lib/HPSocket.lib>
+		$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/mysql/lib/Release/mysqlcppconn.lib>
+		$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/ylib/lib/Release/leveldb.lib>
+		$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/ylib/lib/Release/libzip.lib>
+		$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/ylib/lib/Release/lua.lib>
+		$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/ylib/lib/Release/sqlite3.lib>
+		$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/ylib/lib/Release/ylib.lib>
+		$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/ylib/lib/Release/zlib.lib>
+		
+		$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Release/libsoci_core_4_1.lib>
+		$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Release/libsoci_empty_4_1.lib>
+		$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Release/libsoci_odbc_4_1.lib>
+		$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Release/soci_core_4_1.lib>
+		$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Release/soci_empty_4_1.lib>
+		$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/soci/lib/Release/soci_odbc_4_1.lib>
+
+	
+	
+	)
+else()
+	target_link_libraries(${PROJECT_NAME} 
+			hpsocket
+			ylib
+			leveldb
+			soci_core
+			soci_firebird
+			soci_mysql
+			soci_odbc
+			soci_postgresql
+			soci_sqlite3
+			crypto
+			lua5.4
+			mysqlcppconn
+	)
+
+endif()
+
+
+
+########################  安装  ########################
+install(TARGETS ${PROJECT_NAME} DESTINATION bin)
+install(FILES 
+	$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Lib/HPSocket_D.dll>
+	$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/mysql/lib/Debug/libcrypto-3-x64.dll>
+	$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/mysql/lib/Debug/libssl-3-x64.dll>
+	$<$<CONFIG:Debug>:${PROJECT_SOURCE_DIR}/3rdparty/mysql/lib/Debug/mysqlcppconn-9-vs14.dll>
+
+
+	$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/HP-Socket/Lib/HPSocket.dll>
+	$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/mysql/lib/Release/libcrypto-3-x64.dll>
+	$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/mysql/lib/Release/libssl-3-x64.dll>
+	$<$<CONFIG:Release>:${PROJECT_SOURCE_DIR}/3rdparty/mysql/lib/Release/mysqlcppconn-9-vs14.dll>
+	config.ini
+DESTINATION bin)
+install(DIRECTORY ${PROJECT_SOURCE_DIR}/scripts DESTINATION bin)
+
+
+

+ 0 - 21
LICENSE.txt

@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) [year] [fullname]
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 69
README.md

@@ -1,69 +0,0 @@
-# Fast Web (快速网站开发框架)
-
-
-## 简介
-Fast Web 是使用 C++ 和 Lua 开发的网站框架,以快速开发、部署简单为理念,核心部分由C++实现,Lua 脚本语言处理业务逻辑,
-Fast Web 旨在简化复杂的部署和环境配置,使开发者能够迅速启动并运行他们的网站。
-
-QQ群:153076832
-## 特性
-- **LUA脚本**:通过Lua脚本实现业务逻辑开发,编写及维护更加容易
-- **易于部署**:只需一个可执行文件
-- **灵活易用**:适合各类个人博客、API接口到复杂的企业级项目
-
-## 示例
-
-URL: http://127.0.0.1:8888/scripts/index.lua?key=123456
-
-#### 拦截器
-```lua
-function access()
-
-    if request:pstring("key") == "123456" then
-		return true
-	end
-
-	response:send("密钥不正确,已被拦截器拦截.")	
-	return false
-end
-```
-#### 业务代码
-```lua
--- 通用入口函数
-function access()
-
-    -- MYSQL执行SELECT查询map表
-	local result = mysql:select():table("map"):query()
-
-	-- 构建回复数据
-	local data = result:table()
-
-	-- 返回JSON数据
-	json(data)
-end
-```
-
-## 部署
-目前仅支持Windows部署,Linux将在下个版本支持
-```bash
-# 克隆仓库
-git clone https://github.com/Liuccysdgg/fastweb.git
-# 进入项目目录
-cd fastweb
-# 编译项目 (确保你的机器上安装了VS2022集成开发环境)
-# 运行 fastweb.sln 编译
-```
-
-三方库均仅提供x64二进制发布版本,如需更新或修改请自行根据下方链接下载编译
-
-## 🙇致谢
-如果没有社区已有的优秀软件帮助,fastweb就不可能构建出来
-
-https://github.com/Liuccysdgg/ylib 跨平台快速开发库
-
-https://github.com/ldcsaa/HP-Socket HPSocket高性能网络库
-
-https://github.com/ThePhD/sol2 C++ 与 Lua 的绑定
-
-https://github.com/lua/lua 脚本解释器
-

+ 1 - 1
config.ini

@@ -1,5 +1,5 @@
 [variable]
-base=D:/project/fastweb
+base=${current_dir}
 [scripts]
 ; 应用目录(可执行脚本)
 ; 考虑安全性,请勿放置于网站静态文件目录

+ 0 - 31
fastweb.sln

@@ -1,31 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.9.34723.18
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fastweb", "fastweb.vcxproj", "{30FF78DA-6DB2-4600-9DB1-8D581D3B38BA}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|x64 = Debug|x64
-		Debug|x86 = Debug|x86
-		Release|x64 = Release|x64
-		Release|x86 = Release|x86
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{30FF78DA-6DB2-4600-9DB1-8D581D3B38BA}.Debug|x64.ActiveCfg = Debug|x64
-		{30FF78DA-6DB2-4600-9DB1-8D581D3B38BA}.Debug|x64.Build.0 = Debug|x64
-		{30FF78DA-6DB2-4600-9DB1-8D581D3B38BA}.Debug|x86.ActiveCfg = Debug|Win32
-		{30FF78DA-6DB2-4600-9DB1-8D581D3B38BA}.Debug|x86.Build.0 = Debug|Win32
-		{30FF78DA-6DB2-4600-9DB1-8D581D3B38BA}.Release|x64.ActiveCfg = Release|x64
-		{30FF78DA-6DB2-4600-9DB1-8D581D3B38BA}.Release|x64.Build.0 = Release|x64
-		{30FF78DA-6DB2-4600-9DB1-8D581D3B38BA}.Release|x86.ActiveCfg = Release|Win32
-		{30FF78DA-6DB2-4600-9DB1-8D581D3B38BA}.Release|x86.Build.0 = Release|Win32
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-	GlobalSection(ExtensibilityGlobals) = postSolution
-		SolutionGuid = {3C07C2E6-C40B-4D78-900B-E25ADE05A28C}
-	EndGlobalSection
-EndGlobal

+ 0 - 202
fastweb.vcxproj

@@ -1,202 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\core\bytecodemanager.cpp" />
-    <ClCompile Include="src\core\config.cpp" />
-    <ClCompile Include="src\core\fastweb.cpp" />
-    <ClCompile Include="src\core\global.cpp" />
-    <ClCompile Include="src\core\main.cpp" />
-    <ClCompile Include="src\core\statemanager.cpp" />
-    <ClCompile Include="src\module\codec.cpp" />
-    <ClCompile Include="src\module\globalfuns.cpp" />
-    <ClCompile Include="src\module\http\httpclient.cpp" />
-    <ClCompile Include="src\module\http\request.cpp" />
-    <ClCompile Include="src\module\http\response.cpp" />
-    <ClCompile Include="src\module\http\session.cpp" />
-    <ClCompile Include="src\module\localstorage.cpp" />
-    <ClCompile Include="src\module\mssql.cpp" />
-    <ClCompile Include="src\module\mutex.cpp" />
-    <ClCompile Include="src\module\mysql.cpp" />
-    <ClCompile Include="src\module\time.cpp" />
-    <ClCompile Include="src\utils\logutils.cpp" />
-    <ClCompile Include="src\utils\luautils.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="src\core\bytecodemanager.h" />
-    <ClInclude Include="src\core\config.h" />
-    <ClInclude Include="src\core\define.h" />
-    <ClInclude Include="src\core\fastweb.h" />
-    <ClInclude Include="src\core\global.h" />
-    <ClInclude Include="src\core\statemanager.h" />
-    <ClInclude Include="src\core\structs.h" />
-    <ClInclude Include="src\module\codec.h" />
-    <ClInclude Include="src\module\globalfuns.h" />
-    <ClInclude Include="src\module\http\httpclient.h" />
-    <ClInclude Include="src\module\http\request.h" />
-    <ClInclude Include="src\module\http\response.h" />
-    <ClInclude Include="src\module\http\session.h" />
-    <ClInclude Include="src\module\imodule.h" />
-    <ClInclude Include="src\module\localstorage.h" />
-    <ClInclude Include="src\module\mssql.h" />
-    <ClInclude Include="src\module\mutex.h" />
-    <ClInclude Include="src\module\mysql.h" />
-    <ClInclude Include="src\module\time.h" />
-    <ClInclude Include="src\utils\logutils.h" />
-    <ClInclude Include="src\utils\luautils.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include=".gitignore" />
-    <None Include="config.ini" />
-    <None Include="README.md" />
-  </ItemGroup>
-  <ItemGroup>
-    <Text Include="LICENSE.txt" />
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <VCProjectVersion>17.0</VCProjectVersion>
-    <Keyword>Win32Proj</Keyword>
-    <ProjectGuid>{30ff78da-6db2-4600-9db1-8d581d3b38ba}</ProjectGuid>
-    <RootNamespace>fastweb</RootNamespace>
-    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v143</PlatformToolset>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v143</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v143</PlatformToolset>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v143</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="Shared">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <OutDir>$(SolutionDir)bin\debug</OutDir>
-    <IntDir>$(SolutionDir)obj\debug</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <OutDir>$(SolutionDir)bin\release</OutDir>
-    <IntDir>$(SolutionDir)obj\release</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <SDLCheck>true</SDLCheck>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <ConformanceMode>true</ConformanceMode>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <SDLCheck>true</SDLCheck>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <ConformanceMode>true</ConformanceMode>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <SDLCheck>false</SDLCheck>
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <ConformanceMode>true</ConformanceMode>
-      <AdditionalIncludeDirectories>$(SolutionDir)3rdparty\soci\include;$(SolutionDir)src;$(SolutionDir)3rdparty;$(SolutionDir)3rdparty\lua;D:\lib\ylib\include;$(SolutionDir)3rdparty\HP-Socket\include</AdditionalIncludeDirectories>
-      <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
-      <LanguageStandard>stdcpp20</LanguageStandard>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>libsoci_core_4_1.lib;libsoci_empty_4_1.lib;libsoci_odbc_4_1.lib;soci_core_4_1.lib;soci_empty_4_1.lib;soci_odbc_4_1.lib;odbc32.lib;User32.lib;Advapi32.lib;IPHLPAPI.lib;WS2_32.lib;Shell32.lib;leveldb.lib;libzip.lib;lua.lib;sqlite3.lib;D:\lib\ylib_vs_build\lib\Debug\ylib.lib;zlib.lib;mysqlcppconn.lib;HPSocket_D.lib;libcrypto_static.lib</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(SolutionDir)3rdparty\ylib\lib\$(Configuration);$(SolutionDir)3rdparty\mysql\lib\$(Configuration);$(SolutionDir)3rdparty\HP-Socket\lib;$(SolutionDir)3rdparty;$(SolutionDir)3rdparty\soci\lib\$(Configuration)</AdditionalLibraryDirectories>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <SDLCheck>false</SDLCheck>
-      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <ConformanceMode>true</ConformanceMode>
-      <AdditionalIncludeDirectories>$(SolutionDir)3rdparty\soci\include;$(SolutionDir)src;$(SolutionDir)3rdparty;$(SolutionDir)3rdparty\lua;D:\lib\ylib\include;$(SolutionDir)3rdparty\HP-Socket\include</AdditionalIncludeDirectories>
-      <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
-      <LanguageStandard>stdcpp20</LanguageStandard>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>libsoci_core_4_1.lib;libsoci_empty_4_1.lib;libsoci_odbc_4_1.lib;soci_core_4_1.lib;soci_empty_4_1.lib;soci_odbc_4_1.lib;odbc32.lib;User32.lib;Advapi32.lib;IPHLPAPI.lib;WS2_32.lib;Shell32.lib;leveldb.lib;libzip.lib;lua.lib;sqlite3.lib;ylib.lib;zlib.lib;mysqlcppconn.lib;HPSocket.lib;libcrypto_static.lib</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(SolutionDir)3rdparty\ylib\lib\$(Configuration);$(SolutionDir)3rdparty\mysql\lib\$(Configuration);$(SolutionDir)3rdparty\HP-Socket\lib;$(SolutionDir)3rdparty;$(SolutionDir)3rdparty\soci\lib\$(Configuration)</AdditionalLibraryDirectories>
-    </Link>
-  </ItemDefinitionGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>

+ 0 - 152
fastweb.vcxproj.filters

@@ -1,152 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="src">
-      <UniqueIdentifier>{edadfc2f-873d-4876-be12-0f0a346c671a}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="src\core">
-      <UniqueIdentifier>{a7a813c2-1819-4d9e-97b1-553df4fc20f3}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="src\module">
-      <UniqueIdentifier>{feb78a4c-cec1-4b7c-850b-6d1451e57962}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="src\utils">
-      <UniqueIdentifier>{2b04f1f8-4027-4d87-a828-f18f2b918b8f}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="src\module\http">
-      <UniqueIdentifier>{a6112717-e5e3-426e-9132-03cd4315deb0}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\core\main.cpp">
-      <Filter>src\core</Filter>
-    </ClCompile>
-    <ClCompile Include="src\core\fastweb.cpp">
-      <Filter>src\core</Filter>
-    </ClCompile>
-    <ClCompile Include="src\core\statemanager.cpp">
-      <Filter>src\core</Filter>
-    </ClCompile>
-    <ClCompile Include="src\core\config.cpp">
-      <Filter>src\core</Filter>
-    </ClCompile>
-    <ClCompile Include="src\utils\logutils.cpp">
-      <Filter>src\utils</Filter>
-    </ClCompile>
-    <ClCompile Include="src\module\mysql.cpp">
-      <Filter>src\module</Filter>
-    </ClCompile>
-    <ClCompile Include="src\module\http\session.cpp">
-      <Filter>src\module\http</Filter>
-    </ClCompile>
-    <ClCompile Include="src\module\http\request.cpp">
-      <Filter>src\module\http</Filter>
-    </ClCompile>
-    <ClCompile Include="src\module\http\response.cpp">
-      <Filter>src\module\http</Filter>
-    </ClCompile>
-    <ClCompile Include="src\core\bytecodemanager.cpp">
-      <Filter>src\core</Filter>
-    </ClCompile>
-    <ClCompile Include="src\utils\luautils.cpp">
-      <Filter>src\utils</Filter>
-    </ClCompile>
-    <ClCompile Include="src\core\global.cpp">
-      <Filter>src\core</Filter>
-    </ClCompile>
-    <ClCompile Include="src\module\localstorage.cpp">
-      <Filter>src\module</Filter>
-    </ClCompile>
-    <ClCompile Include="src\module\globalfuns.cpp">
-      <Filter>src\module</Filter>
-    </ClCompile>
-    <ClCompile Include="src\module\mutex.cpp">
-      <Filter>src\module</Filter>
-    </ClCompile>
-    <ClCompile Include="src\module\codec.cpp">
-      <Filter>src\module</Filter>
-    </ClCompile>
-    <ClCompile Include="src\module\mssql.cpp">
-      <Filter>src\module</Filter>
-    </ClCompile>
-    <ClCompile Include="src\module\time.cpp">
-      <Filter>src\module</Filter>
-    </ClCompile>
-    <ClCompile Include="src\module\http\httpclient.cpp">
-      <Filter>src\module\http</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="src\core\fastweb.h">
-      <Filter>src\core</Filter>
-    </ClInclude>
-    <ClInclude Include="src\core\statemanager.h">
-      <Filter>src\core</Filter>
-    </ClInclude>
-    <ClInclude Include="src\core\structs.h">
-      <Filter>src\core</Filter>
-    </ClInclude>
-    <ClInclude Include="src\core\define.h">
-      <Filter>src\core</Filter>
-    </ClInclude>
-    <ClInclude Include="src\core\config.h">
-      <Filter>src\core</Filter>
-    </ClInclude>
-    <ClInclude Include="src\utils\logutils.h">
-      <Filter>src\utils</Filter>
-    </ClInclude>
-    <ClInclude Include="src\module\mysql.h">
-      <Filter>src\module</Filter>
-    </ClInclude>
-    <ClInclude Include="src\module\http\session.h">
-      <Filter>src\module\http</Filter>
-    </ClInclude>
-    <ClInclude Include="src\module\http\request.h">
-      <Filter>src\module\http</Filter>
-    </ClInclude>
-    <ClInclude Include="src\module\http\response.h">
-      <Filter>src\module\http</Filter>
-    </ClInclude>
-    <ClInclude Include="src\core\bytecodemanager.h">
-      <Filter>src\core</Filter>
-    </ClInclude>
-    <ClInclude Include="src\utils\luautils.h">
-      <Filter>src\utils</Filter>
-    </ClInclude>
-    <ClInclude Include="src\core\global.h">
-      <Filter>src\core</Filter>
-    </ClInclude>
-    <ClInclude Include="src\module\imodule.h">
-      <Filter>src\module</Filter>
-    </ClInclude>
-    <ClInclude Include="src\module\localstorage.h">
-      <Filter>src\module</Filter>
-    </ClInclude>
-    <ClInclude Include="src\module\globalfuns.h">
-      <Filter>src\module</Filter>
-    </ClInclude>
-    <ClInclude Include="src\module\mutex.h">
-      <Filter>src\module</Filter>
-    </ClInclude>
-    <ClInclude Include="src\module\codec.h">
-      <Filter>src\module</Filter>
-    </ClInclude>
-    <ClInclude Include="src\module\mssql.h">
-      <Filter>src\module</Filter>
-    </ClInclude>
-    <ClInclude Include="src\module\time.h">
-      <Filter>src\module</Filter>
-    </ClInclude>
-    <ClInclude Include="src\module\http\httpclient.h">
-      <Filter>src\module\http</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="config.ini" />
-    <None Include="README.md" />
-    <None Include=".gitignore" />
-  </ItemGroup>
-  <ItemGroup>
-    <Text Include="LICENSE.txt" />
-  </ItemGroup>
-</Project>

+ 0 - 4
fastweb.vcxproj.user

@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup />
-</Project>

+ 0 - 10
root/index.html

@@ -1,10 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <meta charset="utf-8">
-    <title>FastWeb快速开发框架</title>
-</head>
-<body>
-<h1>FastWeb快速开发框架</h1>
-</body>
-</html>

+ 2 - 9
scripts/app/index.lua

@@ -1,17 +1,10 @@
 require "website"
-
 -- 通用入口函数
+route = {"/",GET}
 function access()
-
-	-- MYSQL执行SELECT查询map表
-	--local result = mysql:select():table("map"):query()
-
-	-- 构建回复数据
-	--local data = result:table()
-
 	local data = {
 		name = "Fast Web 快速网站开发框架"
 	}
 	-- 返回JSON数据
-	json(data)
+	reply(200,"OK",data)
 end

+ 2 - 15
scripts/init.lua

@@ -1,19 +1,6 @@
-require "website"
--- MYSQL数据库池
+
 
-function initMysql()
-	local pool =  mysql_pool.new()
-	if pool:start("127.0.0.1","test","123456","test","utf8mb4",3306,10) == false then
-		print("start mysql pool failed")
-		return false
-	end
-	 global_regist("mysql",pool:self())
-	 return true
-end
+print("init fast web success!")
 
 
-if initMysql() == false then
-	return false
-end
-
 return true

+ 5 - 7
scripts/interceptor.lua

@@ -1,9 +1,7 @@
-function access()
-
-	if request:pstring("key") == "123456" then
-		return true
+require "website"
+function access()
+	if param("key") == nil or param("key") ~= "123465" then
+		print("is not found key")
 	end
-
-	response:send("密钥不正确,已被拦截器拦截.")	
-	return false
+	return true
 end

+ 15 - 0
scripts/lib/website.lua

@@ -1,8 +1,23 @@
 local dkjson = require 'dkjson'
 
 function json(data)
+	response:header("Content-Type","application/json")
 	response:send(dkjson.encode(data))
 end
 function session()
 	 return request:session(request:token())
 end
+function param(name)
+	return request:param(name,false)
+end
+function param_throw(name)
+	return request:param(name,true)
+end
+function reply(code,msg,data)
+	local data ={
+		code =code,
+		msg = msg,
+		data = data
+	}
+	json(data)
+end

+ 2 - 0
src/core/config.cpp

@@ -14,6 +14,8 @@ bool config::open(const std::string& ini_filepath)
 		return false;
 	}
 	std::string src_content = ylib::file::read(temp_filepath);
+	src_content = strutils::replace(src_content, "${current_dir}", strutils::replace(system::current_dir(),'\\','/'));
+	ylib::file::write(temp_filepath,src_content);
 	if (m_ini.open(temp_filepath))
 	{
 		auto vars = extractVariableNames(ylib::file::read(temp_filepath));

+ 64 - 7
src/core/fastweb.cpp

@@ -75,7 +75,66 @@ bool fastweb::start()
 	{
 		auto map = service_bytecode.map();
 		for_iter(iter, map)
-			router->subscribe(sConfig->scripts.app_mapping_dir + iter->first, ALL, &fastweb::subscribe_service);
+		{
+			auto state = sStateMgr->get_state();
+			std::string route_pattern;
+			network::http::method method = network::http::ALL;
+			try
+			{
+				auto result = state->script_file(iter->second->filepath);
+				if (result.valid()) {
+					auto router = (*state)["route"];
+					auto type = router.get_type();
+					if (router.is<sol::table>())
+					{
+						sol::optional<std::string> route_pattern_param = router[1];
+						sol::optional<int> method_param = router[2];
+						if (route_pattern_param && route_pattern_param->empty() == false)
+							route_pattern = *route_pattern_param;
+						if (method_param)
+							method = (network::http::method)*method_param;
+					}
+				}
+			}
+			catch (const std::exception& e)
+			{
+				LOG_ERROR(e.what());
+			}
+			if (route_pattern.empty())
+				route_pattern = sConfig->scripts.app_mapping_dir + iter->first;
+
+			// OutPutLog
+			{
+				std::string log;
+				log = "[subscribe] lua: " + iter->first + "\t pattern: " + route_pattern + "\t method: ";
+				switch (method)
+				{
+				case ylib::network::http::GET:
+					log.append("GET");
+					break;
+				case ylib::network::http::POST:
+					log.append("POST");
+					break;
+				case ylib::network::http::PUT:
+					log.append("PUT");
+					break;
+				case ylib::network::http::DEL:
+					log.append("DEL");
+					break;
+				case ylib::network::http::HEAD:
+					log.append("HEAD");
+					break;
+				case ylib::network::http::ALL:
+					log.append("ALL");
+					break;
+				default:
+					break;
+				}
+				LOG_INFO(log);
+			}
+			router->subscribe(route_pattern, method, &fastweb::subscribe_service,new std::string(iter->first));
+		}
+			
 	}
 	
 	// 加入拦截器
@@ -132,11 +191,7 @@ bool fastweb::initialization_script()
 	try
 	{
 		state->set_function("global_regist", module::global_regist);
-
 		auto result = state->script_file(script_filepath);
-
-		
-
 		if (!result.valid()) {
 			sol::error err = result;
 			throw ylib::exception(err.what());
@@ -155,10 +210,12 @@ bool fastweb::initialization_script()
 	return m_lastErrorDesc == "";
 }
 
-void fastweb::subscribe_service(network::http::request* request, network::http::response* response)
+void fastweb::subscribe_service(network::http::request* request, network::http::response* response,void *extra)
 {
+	std::string lua_name = *(std::string*)extra;
+
 	// 文件原路径(非绝对路径)
-	std::string lua_name = strutils::right(request->filepath(), request->filepath().length() - sConfig->scripts.app_mapping_dir.length());
+	//std::string lua_name = strutils::right(request->filepath(), request->filepath().length() - sConfig->scripts.app_mapping_dir.length());
 
 
 	auto lua = sStateMgr->get_state();

+ 1 - 1
src/core/fastweb.h

@@ -34,7 +34,7 @@ private:
 	/// </summary>
 	/// <param name="request"></param>
 	/// <param name="response"></param>
-	static void subscribe_service(network::http::request* request, network::http::response* response);
+	static void subscribe_service(network::http::request* request, network::http::response* response, void* extra);
 	/// <summary>
 	/// 拦截器回调
 	/// </summary>

+ 2 - 2
src/core/main.cpp

@@ -9,7 +9,7 @@ int main()
 	std::cout << "=========== [fastweb engine] ============" << std::endl;
 
 
-	if(sConfig->open(system::current_dir() + "\\config.ini") == false)
+	if(sConfig->open(system::current_dir() + "/config.ini") == false)
 	{
 		LOG_ERROR("open config failed,"+sConfig->last_error());
 		return -1;
@@ -25,4 +25,4 @@ int main()
 	while (true)
 		std::cin.get();
 	return 0;
-}
+}

+ 4 - 0
src/core/statemanager.cpp

@@ -13,7 +13,9 @@
 #include "module/http/session.h"
 #include "module/http/httpclient.h"
 #include "module/mysql.h"
+#ifdef _WIN32
 #include "module/mssql.h"
+#endif
 #include "module/localstorage.h"
 #include "module/globalfuns.h"
 #include "module/mutex.h"
@@ -70,7 +72,9 @@ sol::state* state_manager::create_state()
 	module::session::regist(*lua);
 	module::httpclient::regist(*lua);
 	module::mysql_regist(*lua);
+	#ifdef _WIN32
 	module::mssql::regist(*lua);
+	#endif
 	module::regist_globalfuns(*lua);
 	module::local_storage::regist(lua);
 	module::mutex::regist(lua);

+ 4 - 4
src/module/codec.cpp

@@ -10,12 +10,12 @@ std::string module::codec::url_en(const std::string& value)
     return ylib::codec::url::en(value);
 }
 
-std::string module::codec::gbk_to_utf8(const std::string& value)
+std::string module::codec::to_utf8(const std::string& value)
 {
     return ylib::codec::to_utf8(value);
 }
 
-std::string module::codec::utf8_to_gbk(const std::string& value)
+std::string module::codec::to_gbk(const std::string& value)
 {
     return ylib::codec::to_gbk(value);
 }
@@ -30,8 +30,8 @@ void module::codec::regist(sol::state* lua)
     lua->new_usertype<module::codec>("codec",
         "url_de", &module::codec::url_de,
         "url_en", &module::codec::url_en,
-        "gbk_to_utf8", &module::codec::gbk_to_utf8,
-        "utf8_to_gbk", &module::codec::utf8_to_gbk,
+        "to_utf8", &module::codec::to_utf8,
+        "to_gbk", &module::codec::to_gbk,
         "md5", &module::codec::md5
     );
 }

+ 2 - 2
src/module/codec.h

@@ -21,8 +21,8 @@ namespace module
 		/// GBK转UTF8
 		/// </summary>
 		/// <returns></returns>
-		static std::string gbk_to_utf8(const std::string& value);
-		static std::string utf8_to_gbk(const std::string& value);
+		static std::string to_utf8(const std::string& value);
+		static std::string to_gbk(const std::string& value);
 		/// <summary>
 		/// MD5校验
 		/// </summary>

+ 5 - 0
src/module/http/request.cpp

@@ -57,6 +57,11 @@ void module::request::regist(sol::state& state)
         "body_param", &module::request::body_param,
         "url_param", &module::request::url_param
     );
+    state["GET"] = (int)network::http::GET;
+    state["POST"] = (int)network::http::POST;
+    state["DEL"] = (int)network::http::DEL;
+    state["HEAD"] = (int)network::http::HEAD;
+    state["PUT"] = (int)network::http::PUT;
 }
 
 

+ 6 - 3
src/module/mssql.cpp

@@ -1,4 +1,5 @@
-#include "mssql.h"
+#ifdef _WIN32
+#include "mssql.h"
 #include "soci/odbc/soci-odbc.h"
 module::mssql::mssql(const std::string& connstring)
 {
@@ -42,9 +43,10 @@ void module::mssql::query(const std::string& sql)
     m_rows = (m_session->prepare << sql);
     //m_iter = m_rows.begin();
 }
-uint64 module::mssql::update(const std::string& sql)
+int64 module::mssql::update(const std::string& sql)
 {
-    soci::statement st = (m_session->prepare << sql);
+    soci::statement st = m_session->prepare << sql;
+    st.execute();
     return st.get_affected_rows();
 }
 bool module::mssql::next()
@@ -74,3 +76,4 @@ void module::mssql::regist(sol::state& lua)
         "update", &module::mssql::update
     );
 }
+#endif

+ 3 - 1
src/module/mssql.h

@@ -1,4 +1,5 @@
 #pragma once
+#ifdef _WIN32
 #include "sol/sol.hpp"
 #include "imodule.h"
 #include "soci/soci.h"
@@ -35,7 +36,7 @@ namespace module
 		bool next();
 
 
-		uint64 update(const std::string& sql);
+		int64 update(const std::string& sql);
 		/// <summary>
 		/// 注册
 		/// </summary>
@@ -52,3 +53,4 @@ namespace module
 
 }
 
+#endif

+ 7 - 1
src/module/time.cpp

@@ -9,10 +9,16 @@ uint64 module::time::now_sec()
     return ylib::time::now_sec();
 }
 
+std::string module::time::now_time(const std::string& format)
+{
+    return ylib::time::now_time(format);
+}
+
 void module::time::regist(sol::state* lua)
 {
     lua->new_usertype<module::time>("time",
         "now_msec", &module::time::now_msec,
-        "now_sec", &module::time::now_sec
+        "now_sec", &module::time::now_sec,
+        "now_time", &module::time::now_time
     );
 }

+ 1 - 4
src/module/time.h

@@ -9,12 +9,9 @@ namespace module
 	/// </summary>
 	class time:public module::imodule {
 	public:
-		/// <summary>
-		/// URL解码
-		/// </summary>
 		static uint64 now_msec();
 		static uint64 now_sec();
-
+		static std::string now_time(const std::string& format);
 		static void regist(sol::state* lua);
 	};
 

+ 22 - 4
src/utils/logutils.cpp

@@ -3,7 +3,9 @@
 #include "util/time.h"
 #include "util/codec.h"
 #include "util/file.h"
+#ifdef _WIN32
 #include <Windows.h>
+#endif
 #define DEBUG_INFO 0
 void print(const std::string& type,const std::string& msg,const std::string& filepath, const std::string& func, int line,int color) {
 
@@ -23,7 +25,11 @@ void print(const std::string& type,const std::string& msg,const std::string& fil
 }
 void LogUtils::success(const std::string& msg, const std::string& filepath, const std::string& func, int line)
 {
-    ::print("[SUCC ] ", msg, filepath, func, line, ylib::ConsoleTextColor::GREEN | FOREGROUND_INTENSITY);
+    ::print("[SUCC ] ", msg, filepath, func, line, ylib::ConsoleTextColor::GREEN 
+    #ifdef _WIN32
+    |FOREGROUND_INTENSITY
+    #endif
+    );
 }
 
 void LogUtils::info(const std::string& msg, const std::string& filepath, const std::string& func, int line)
@@ -35,7 +41,11 @@ void LogUtils::info(const std::string& msg, const std::string& filepath, const s
 void LogUtils::error(const std::string& msg, const std::string& filepath, const std::string& func, int line)
 {
 //#ifdef _DEBUG
-    ::print("[ERROR] ", msg, filepath, func, line, ylib::ConsoleTextColor::RED | FOREGROUND_INTENSITY);
+    ::print("[ERROR] ", msg, filepath, func, line, ylib::ConsoleTextColor::RED 
+    #ifdef _WIN32
+    | FOREGROUND_INTENSITY
+    #endif
+    );
 //#else
     
 //#endif
@@ -43,10 +53,18 @@ void LogUtils::error(const std::string& msg, const std::string& filepath, const
 
 void LogUtils::warn(const std::string& msg, const std::string& filepath, const std::string& func, int line)
 {
-    ::print("[WARN ] ", msg, filepath, func, line, ylib::ConsoleTextColor::YELLOW | FOREGROUND_INTENSITY);
+    ::print("[WARN ] ", msg, filepath, func, line, ylib::ConsoleTextColor::YELLOW 
+    #ifdef _WIN32
+    | FOREGROUND_INTENSITY
+    #endif
+    );
 }
 
 void LogUtils::debug(const std::string& msg, const std::string& filepath, const std::string& func,int line)
 {
-    ::print("[DEBUG] ", msg, filepath, func, line, ylib::ConsoleTextColor::BLUE | FOREGROUND_INTENSITY);
+    ::print("[DEBUG] ", msg, filepath, func, line, ylib::ConsoleTextColor::BLUE
+    #ifdef _WIN32
+    | FOREGROUND_INTENSITY
+    #endif
+    );
 }