diff --git a/lualib/skynet-fly/log.lua b/lualib/skynet-fly/log.lua index 7e557d0b..405283b3 100644 --- a/lualib/skynet-fly/log.lua +++ b/lualib/skynet-fly/log.lua @@ -1,6 +1,5 @@ local skynet = require "skynet" local table_util = require "skynet-fly.utils.table_util" -local time_util = require "skynet-fly.utils.time_util" local module_info = require "skynet-fly.etc.module_info" local sformat = string.format local sdump = table_util.dump @@ -11,14 +10,10 @@ local pairs = pairs local assert = assert local tostring = tostring local tinsert = table.insert -local ipairs = ipairs local sfind = string.find local ssub = string.sub local schar = string.char -local math_floor = math.floor local tpack = table.pack -local tunpack = table.unpack -local osdate = os.date local M = { INFO = 0, @@ -125,8 +120,8 @@ function M.parse(log_str) if schar(log_str:byte(34)) == '[' then local _,type_e = sfind(log_str,"]",38,true) if type_e then - log_type = ssub(log_str,35,type_e - 1) - log_type = level_map[log_type] or M.UNKNOWN + local log_type_str = ssub(log_str,35,type_e - 1) + log_type = level_map[log_type_str] or M.UNKNOWN local s_n_b = type_e + 2 local _,s_n_e = sfind(log_str,"]",s_n_b,true) diff --git a/lualib/skynet-fly/logrotate.lua b/lualib/skynet-fly/logrotate.lua index d8a4c91c..d4e6ed74 100644 --- a/lualib/skynet-fly/logrotate.lua +++ b/lualib/skynet-fly/logrotate.lua @@ -1,3 +1,12 @@ +---#API +---#content --- +---#content title: 日志轮换 +---#content date: 2024-06-29 22:00:00 +---#content categories: ["skynet_fly API 文档","日志轮换"] +---#content category_bar: true +---#content tags: [skynet_fly_api] +---#content --- +---#content [logrotate](https://github.com/huahua132/skynet_fly/blob/master/lualib/skynet-fly/logrotate.lua) local contriner_client = require "skynet-fly.client.contriner_client" local skynet_util = require "skynet-fly.utils.skynet_util" local contriner_interface = require "skynet-fly.contriner.contriner_interface" @@ -35,7 +44,9 @@ end local M = {} local mt = {__index = M} - +---#desc 新建对象 +---@param filename string 文件名 +---@return table 对象 function M:new(filename) local t = { cfg = { @@ -47,7 +58,9 @@ function M:new(filename) return t end ---重命名文件格式 +---#desc 重命名文件格式 +---@param rename_format string +---@return table 对象 function M:set_rename_format(rename_format) assert(not self.is_builder, "builded can`t use set_rename_format") assert(type(rename_format) == 'string', "rename_format not string") @@ -56,7 +69,9 @@ function M:set_rename_format(rename_format) return self end ---设置文件路径 +---#desc 设置文件路径 +---@param file_path string 文件路径 +---@return table 对象 function M:set_file_path(file_path) assert(not self.is_builder, "builded can`t use set_file_path") assert(type(file_path) == 'string', "file_path not string") @@ -65,7 +80,9 @@ function M:set_file_path(file_path) return self end ---设置至少多大才会切割 +---#desc 设置至少多大才会切割 +---@param limit_size number 至少多大 +---@return table 对象 function M:set_limit_size(limit_size) assert(not self.is_builder, "builded can`t use set_limit_size") assert(type(limit_size) == 'number', "limit_size not number") @@ -75,7 +92,9 @@ function M:set_limit_size(limit_size) return self end ---设置最大保留天数 +---#desc 设置最大保留天数 +---@param max_age number 保留天数 +---@return table 对象 function M:set_max_age(max_age) assert(not self.is_builder, "builded can`t use set_max_age") assert(type(max_age) == 'number', "max_age not number") @@ -85,7 +104,9 @@ function M:set_max_age(max_age) return self end ---设置最大保留文件数 +---#desc 设置最大保留文件数 +---@param max_backups number 保留文件数 +---@return table 对象 function M:set_max_backups(max_backups) assert(not self.is_builder, "builded can`t use set_max_backups") assert(type(max_backups) == 'number', "max_backups not number") @@ -95,7 +116,9 @@ function M:set_max_backups(max_backups) return self end ---设置轮转时调用系统命令 +---#desc 设置轮转时调用系统命令 +---@param sys_cmd string 系统命令 +---@return table 对象 function M:set_sys_cmd(sys_cmd) assert(not self.is_builder, "builded can`t use set_sys_cmd") assert(type(sys_cmd == 'string'), "sys_cmd not number") @@ -104,7 +127,9 @@ function M:set_sys_cmd(sys_cmd) return self end ---设置整点报时类型 +---#desc 设置整点报时类型 +---@param point_type number 报时类型 +---@return table 对象 function M:set_point_type(point_type) assert(not self.is_builder, "builded can`t use set_point_type") assert(type(point_type == 'number'), "point_type not number") @@ -112,85 +137,65 @@ function M:set_point_type(point_type) cfg.point_type = point_type return self end ---[[ - 函数作用域:M:new 对象的成员函数 - 函数名称:set_month - 描述: 指定几月 - 参数: - - month (number): 月份 1-12 - -]] + +---#desc 指定几月 +---@param month number 几月[1,12] +---@return table 对象 function M:set_month(month) assert(not self.is_builder, "builded can`t use set_month") - assert(month >= 1 and month <= 12) + assert(month >= 1 and month <= 12, "Must be within this range[1,12] month=" .. tostring(month)) local cfg = self.cfg cfg.month = month return self end ---[[ - 函数作用域:M:new 对象的成员函数 - 函数名称:set_day - 描述: 每月第几天,超过适配到最后一天 - 参数: - - day (number): 天数 1-31 -]] + +---#desc 指定月第几天 +---@param day number 月第几天[1,31] +---@return table 对象 function M:set_day(day) assert(not self.is_builder, "builded can`t use set_day") - assert(day >= 1 and day <= 31) + assert(day >= 1 and day <= 31, "Must be within this range[1,31] day=" .. tostring(day)) local cfg = self.cfg cfg.day = day return self end ---[[ - 函数作用域:M:new 对象的成员函数 - 函数名称:set_hour - 描述: 几时 - 参数: - - hour (number): 几时 0-23 -]] + +---#desc 几时 +---@param hour number 几时[0,23] +---@return table 对象 function M:set_hour(hour) assert(not self.is_builder, "builded can`t use set_hour") - assert(hour >= 0 and hour <= 23) + assert(hour >= 0 and hour <= 23, "Must be within this range[0,23] hour=" .. tostring(hour)) local cfg = self.cfg cfg.hour = hour return self end ---[[ - 函数作用域:M:new 对象的成员函数 - 函数名称:set_min - 描述: 几分 - 参数: - - min (number): 几分 0-59 -]] + +---#desc 几分 +---@param min number 几分[0,59] +---@return table 对象 function M:set_min(min) assert(not self.is_builder, "builded can`t use set_min") - assert(min >= 0 and min <= 59) + assert(min >= 0 and min <= 59, "Must be within this range[0,59] min=" .. tostring(min)) local cfg = self.cfg cfg.min = min return self end ---[[ - 函数作用域:M:new 对象的成员函数 - 函数名称:set_sec - 描述: 几秒 - 参数: - - sec (number): 几秒 0-59 -]] + +---#desc 几秒 +---@param sec number 几秒[0,59] +---@return table 对象 function M:set_sec(sec) assert(not self.is_builder, "builded can`t use set_sec") - assert(sec >= 0 and sec <= 59) + assert(sec >= 0 and sec <= 59, "Must be within this range[0,59] sec=" .. tostring(sec)) local cfg = self.cfg cfg.sec = sec return self end ---[[ - 函数作用域:M:new 对象的成员函数 - 函数名称:set_wday - 描述: 周几(仅仅设置每周有效) - 参数: - - wday (number): 周几 1-7 星期天为 1 -]] +---#desc 周几(仅仅设置每周有效) +---@param wday number 周几[1,7] +---@return table 对象 function M:set_wday(wday) assert(not self.is_builder, "builded can`t use set_wday") assert(wday >= 1 and wday <= 7) @@ -199,13 +204,9 @@ function M:set_wday(wday) return self end ---[[ - 函数作用域:M:new 对象的成员函数 - 函数名称:set_yday - 描述: 一年第几天(仅仅设置每年第几天有效) - 参数: - - yday (number): 第几天 1-366 超过适配到最后一天。 -]] +---#desc 一年第几天(仅仅设置每年第几天有效) +---@param yday number 周几[1,366] +---@return table 对象 function M:set_yday(yday) assert(not self.is_builder, "builded can`t use set_yday") assert(yday >= 1 and yday <= 366) @@ -214,7 +215,9 @@ function M:set_yday(yday) return self end ---设置保留文件整理匹配表达式 +---#desc 设置保留文件整理匹配表达式 +---@param back_pattern string find表达式 +---@return table 对象 function M:set_back_pattern(back_pattern) assert(not self.is_builder, "builded can`t use set_back_pattern") assert(type(back_pattern) == 'string', "back_pattern not string") @@ -223,7 +226,8 @@ function M:set_back_pattern(back_pattern) return self end ---构建轮转 +---#desc 构建轮转 +---@return table 对象 function M:builder() assert(not self.is_builder, "builded can`t use builder") self.is_builder = true @@ -234,7 +238,8 @@ function M:builder() return self end ---取消轮转 +---#desc 取消轮转 +---@return table 对象 function M:cancel() assert(self.is_builder, "not builder can`t use cancel") contriner_client:instance("logrotate_m"):mod_call("cancel", skynet.self(), self.id) diff --git a/lualib/skynet-fly/mod_queue.lua b/lualib/skynet-fly/mod_queue.lua index 3675e219..e82f0bec 100644 --- a/lualib/skynet-fly/mod_queue.lua +++ b/lualib/skynet-fly/mod_queue.lua @@ -1,3 +1,12 @@ +---#API +---#content --- +---#content title: mod映射队列 +---#content date: 2024-06-29 22:00:00 +---#content categories: ["skynet_fly API 文档","执行队列"] +---#content category_bar: true +---#content tags: [skynet_fly_api] +---#content --- +---#content [mod_queue](https://github.com/huahua132/skynet_fly/blob/master/lualib/skynet-fly/mod_queue.lua) local queue = require "skynet.queue" local setmetatable = setmetatable @@ -6,6 +15,9 @@ local assert = assert local M = {} local mata = {__index = M} +---#desc 新建队列对象 +---@param cap number 容量 +---@return table function M:new(cap) assert(cap > 0) local t = { @@ -21,6 +33,11 @@ function M:new(cap) return t end +---#desc 执行函数 +---@param mod_num number mod_num % cap + 1 决定使用队列 +---@param func function 执行函数 +---@param ... any 函数参数 +---@return ... 函数返回值 function M:exec(mod_num, func, ...) local index = mod_num % self.cap + 1 local queue = self.queue_list[index] diff --git a/lualib/skynet-fly/mult_queue.lua b/lualib/skynet-fly/mult_queue.lua index caa32220..c54547f2 100644 --- a/lualib/skynet-fly/mult_queue.lua +++ b/lualib/skynet-fly/mult_queue.lua @@ -1,8 +1,16 @@ ---[[ - 这是一个并发,单发互斥的队列 - 并发: key不同不用排队,key相同排队执行,不同key不用排队,有单发执行中,需等待 - 单发: 单发顺序执行需要排队,有并发执行中,需等待 -]] +---#API +---#content --- +---#content title: 并发,单发互斥的队列 +---#content date: 2024-06-29 22:00:00 +---#content categories: ["skynet_fly API 文档","执行队列"] +---#content category_bar: true +---#content tags: [skynet_fly_api] +---#content --- +---#content [mult_queue](https://github.com/huahua132/skynet_fly/blob/master/lualib/skynet-fly/mult_queue.lua) + +---#content这是一个并发,单发互斥的队列 +---#content并发: key不同不用排队,key相同排队执行,不同key不用排队,有单发执行中,需等待 +---#content单发: 单发顺序执行需要排队,有并发执行中,需等待 local skynet = require "skynet" local queue = require "skynet.queue" @@ -38,6 +46,8 @@ local function wakeup(waits) end end +---#desc 新建队列对象 +---@return table function M:new() local t = { unique_queue = queue(), @@ -56,6 +66,11 @@ function M:new() return t end +---#desc 调用并发执行 +---@param key any 不同key可以并发,相同key串行 +---@param func function 调用函数 +---@param ... any 函数参数 +---@return ... 函数返回值 function M:multi(key, func, ...) local co = coroutine.running() assert(not self.doing_co[co], "can`t loop call") --不能嵌套调用 @@ -97,6 +112,10 @@ function M:multi(key, func, ...) end end +---#desc 调用单发执行,执行单发时,并发都暂时等待 +---@param func function 调用函数 +---@param ... any 函数参数 +---@return ... 函数返回值 function M:unique(func, ...) -- 直接锁住 self.is_lock = true diff --git a/lualib/skynet-fly/sharedata.lua b/lualib/skynet-fly/sharedata.lua index 8d13091e..700e265d 100644 --- a/lualib/skynet-fly/sharedata.lua +++ b/lualib/skynet-fly/sharedata.lua @@ -1,3 +1,13 @@ +---#API +---#content --- +---#content title: 共享配置数据 +---#content date: 2024-06-29 22:00:00 +---#content categories: ["skynet_fly API 文档","共享配置数据"] +---#content category_bar: true +---#content tags: [skynet_fly_api] +---#content --- +---#content [sharedata](https://github.com/huahua132/skynet_fly/blob/master/lualib/skynet-fly/sharedata.lua) + local skynet = require "skynet" local sharedata = require "skynet.sharedata" local sharetable = require "skynet.sharetable" @@ -13,10 +23,10 @@ local table_util = require "skynet-fly.utils.table_util" local sinterface = service_watch_interface:new(".sharedata_service") ---------------------------------------------- --- 使用注意点 --- 对于使用sharedata配置,被其他外部引用的表会被更新到,sharetable不会,所以如果想拿到最新的配置就必须用这个文件的`get_map,get_map_list,get_data_table`拿取 --- 对于不想更新到的表sharedata需要做个深拷贝 --- 直接用sharedata 的表数据传入pb,该部分数据打包不进去,需要深拷贝后导入 +---#content 使用注意点 +---#content 对于使用sharedata配置,被其他外部引用的表会被更新到,sharetable不会,所以如果想拿到最新的配置就必须用这个文件的`get_map,get_map_list,get_data_table`拿取 +---#content 对于不想更新到的表sharedata需要做个深拷贝 +---#content 直接用sharedata 的表数据传入pb,该部分数据打包不进去,需要深拷贝后导入 ---------------------------------------------- local next = next @@ -98,7 +108,7 @@ local function add_patch(file_path, up_time) local f = loadfile(path) if not f then log.error("play record err can`t loadfile ", path) - assert(1 == 2) + error("play record err can`t loadfile") end g_data_map[file_path] = f() end @@ -164,7 +174,9 @@ setmetatable(g_version_map, {__index = function(t, k) return version end}) ---加载指定路径列表下配置, mode = sharedata or sharetable +---#desc 加载指定路径列表下配置, +---@param dir_list table 路径列表 +---@param mode number 模式 sharedata or sharetable function M.load(dir_list, mode) assert(mode == M.enum.sharedata or mode == M.enum.sharetable, "not exists mode = " .. mode) local sd = skynet.uniqueservice("sharedata_service") @@ -187,7 +199,10 @@ local function check_swtich(t) end end ---访问代理 +---#desc 配置访问代理 +---@param file_path string 配置路径 +---@param mode number 模式 sharedata or sharetable +---@return table obj 代理对象 function M:new(file_path, mode) assert(mode == M.enum.sharedata or mode == M.enum.sharetable, "not exists mode = " .. mode) local sd = skynet.uniqueservice("sharedata_service") @@ -214,14 +229,19 @@ function M:new(file_path, mode) return t end ---设置单个字段检查 +---#desc 设置单个字段检查 +---@param field_name string 字段名 +---@param func function 检查函数 +---@return table obj 代理对象 function M:set_check_field(field_name, func) assert(not self.is_builder, "builded can`t set_check_field") self.check_func_map[field_name] = func return self end ---设置一行配置检查 +---#desc 设置一行配置检查 +---@param func function 检查函数 +---@return table obj 代理对象 function M:set_check_line(func) assert(not self.is_builder, "builded can`t set_check_line") self.check_line_func = func @@ -237,7 +257,11 @@ end } } ]] ---设置map映射列表 + +---#desc 设置map映射列表 +---@param name string 检查函数 +---@param ... string 字段名 +---@return table obj 代理对象 function M:set_map_list(name, ...) assert(not self.is_builder, "builded can`t set_map_list") local field_list = {...} @@ -256,7 +280,11 @@ end } } ]] ---设置纯map映射表 + +---#desc 设置纯map映射表 +---@param name any +---@param ... string 字段名 +---@return table function M:set_map(name, ...) assert(not self.is_builder, "builded can`t set_map") local field_list = {...} @@ -268,7 +296,7 @@ function M:set_map(name, ...) return self end ---构建 +---#desc 构建 function M:builder() assert(not self.is_builder, "builded can`t builder") self.is_builder = true @@ -358,26 +386,34 @@ local cfg = { } 比如pb需要items,就只需要 M:copy_table(cfg.items)即可 ]] ---copy 配置表 直接用sharedata 的表数据传入pb,该部分数据打包不进去,需要深拷贝后导入 +---#desc copy 配置表 直接用sharedata 的表数据传入pb,该部分数据打包不进去,需要深拷贝后导入 +---@param tab any +---@return table function M:copy_table(tab) return table_util.copy(tab) end ---获取数据表 +---#desc 获取数据表 +---@return table function M:get_data_table() assert(self.is_builder, "not build can`t get_data_table") check_swtich(self) return self.data_table end ---获取maplist +---#desc 获取maplist +---@param name string 索引名 +---@return table function M:get_map_list(name) assert(self.is_builder, "not build can`t get_map_list") check_swtich(self) return self.map_list_map[name] end ---获取map表 +-- +---#desc 获取map +---@param name string 索引名 +---@return table function M:get_map(name) assert(self.is_builder, "not build can`t get_map") check_swtich(self) diff --git a/lualib/skynet-fly/snowflake.lua b/lualib/skynet-fly/snowflake.lua index 4d48c7ba..ebeaa9b8 100644 --- a/lualib/skynet-fly/snowflake.lua +++ b/lualib/skynet-fly/snowflake.lua @@ -1,3 +1,13 @@ +---#API +---#content --- +---#content title: 雪花算法生成唯一ID +---#content date: 2024-06-29 22:00:00 +---#content categories: ["skynet_fly API 文档","唯一ID生成"] +---#content category_bar: true +---#content tags: [skynet_fly_api] +---#content --- +---#content [timer](https://github.com/huahua132/skynet_fly/blob/master/lualib/skynet-fly/timer.lua) +---#content 使用注意,多服架构下,请注意`machine_id`环境参数的配置分配。 local service = require "skynet.service" local skynet = require "skynet" @@ -66,19 +76,30 @@ local MACHINE_TIME_MASK = (1 << TIME_SHIFT) - 1 --机器号time 掩码 local M = {} +---#desc 创建全局GUID +---@return number 全局GUID function M.new_guid() local snowflake = service.new("snowflake", snowflake_service) return skynet.call(snowflake, 'lua', 'new_guid') end +---#desc 通过GUID获取机器号 +---@param guid number 全局GUID +---@return number 机器号 function M.get_machine_id(guid) return guid >> MACHINE_SHIFT end +---#desc 通过GUID获取创建时间 +---@param guid number 全局GUID +---@return number 创建时间 function M.get_time(guid) return (guid & MACHINE_MASK) >> TIME_SHIFT end +---#desc 通过GUID获取自增序号 +---@param guid number 全局GUID +---@return number 创建时间 function M.get_incr(guid) return guid & MACHINE_TIME_MASK end diff --git a/lualib/skynet-fly/timer.lua b/lualib/skynet-fly/timer.lua index e79513e1..346834ef 100644 --- a/lualib/skynet-fly/timer.lua +++ b/lualib/skynet-fly/timer.lua @@ -1,3 +1,12 @@ +---#API +---#content --- +---#content title: 定时器 +---#content date: 2024-06-29 22:00:00 +---#content categories: ["skynet_fly API 文档","定时器相关"] +---#content category_bar: true +---#content tags: [skynet_fly_api] +---#content --- +---#content [timer](https://github.com/huahua132/skynet_fly/blob/master/lualib/skynet-fly/timer.lua) local skynet = require "skynet" local time_util = require "skynet-fly.utils.time_util" local log = require "skynet-fly.log" @@ -69,16 +78,13 @@ end local M = {} local mata = {__index = M} ---[[ - 函数作用域:M 对象的成员函数 - 函数名称:new - 描述: 创建一个定时器对象 - 参数: - - expire (number): 过期时间 100等于1秒 - - times (number): 次数,0表示循环触发 - - callback (function): 回调函数 - - ... 回调参数 -]] + +---#desc 创建一个定时器对象 +---@param expire number 过期时间 100等于1秒 +---@param times number 次数,0表示循环触发 +---@param callback function 回调函数 +---@param ... any 回调参数 +---@return table 定时器对象 function M:new(expire,times,callback,...) assert(expire >= 0) assert(times >= 0) @@ -101,32 +107,23 @@ function M:new(expire,times,callback,...) return t end ---[[ - 函数作用域:M:new 对象的成员函数 - 函数名称:cancel - 描述: 取消定时器 -]] +---#desc 取消定时器 +---@return table 定时器对象 function M:cancel() self.is_cancel = true return self end ---[[ - 函数作用域:M:new 对象的成员函数 - 函数名称:after_next - 描述: 之后下一次 : 回调函数执行完,再注册下一次,默认先注册下一次再执行回调 -]] +---#desc 回调执行完注册再下一次,默认先注册下一次,再执行回调 +---@return table 定时器对象 function M:after_next() self.is_after_next = true return self end ---[[ - 函数作用域:M:new 对象的成员函数 - 函数名称:extend - 描述: 延长定时器 - 参数: - - ex_expire (number): 延长时间 100等于1秒 -]] + +---#desc 定时器延时 +---@param ex_expire number 延长时间 100等于1秒 +---@return table 定时器对象 function M:extend(ex_expire) if self.is_cancel or self.is_over then return self @@ -150,11 +147,8 @@ function M:extend(ex_expire) return nt end ---[[ - 函数作用域:M:new 对象的成员函数 - 函数名称:remain_expire - 描述: 剩余触发时间 -]] +---#desc 获取剩余触发时间 +---@return number 剩余触发时间 -1 表示已经触发完了或者被取消了 function M:remain_expire() if self.is_cancel or self.is_over then return -1 --已经触发完了 diff --git a/lualib/skynet-fly/utils/env_util.lua b/lualib/skynet-fly/utils/env_util.lua index 9475a778..c8d7b206 100644 --- a/lualib/skynet-fly/utils/env_util.lua +++ b/lualib/skynet-fly/utils/env_util.lua @@ -1,3 +1,12 @@ +---#API +---#content --- +---#content title: env_util env相关 +---#content date: 2024-06-29 22:00:00 +---#content categories: ["skynet_fly API 文档","工具函数"] +---#content category_bar: true +---#content tags: [skynet_fly_api] +---#content --- +---#content [env_util](https://github.com/huahua132/skynet_fly/blob/master/lualib/skynet-fly/utils/env_util.lua) local skynet = require "skynet" local assert = assert local loadfile = loadfile @@ -8,7 +17,8 @@ local g_svr_name = skynet.getenv('svr_name') local M = {} ---添加服务启动之前加载的文件 +---#desc 添加服务启动之前加载的lua文件 +---@param path string 路径 function M.add_pre_load(path) assert(loadfile(path),"can`t loadfile :" ..tostring(path)) local pre_load = M.get_pre_load() @@ -24,7 +34,8 @@ function M.get_pre_load() return skynet.getenv("preload") end ---添加服务启动之后加载的文件 +---#desc 添加服务启动之后加载的lua文件 +---@param path string 路径 function M.add_after_load(path) assert(loadfile(path),"can`t loadfile :" ..tostring(path)) local old_after_load = M.get_after_load() @@ -40,12 +51,12 @@ function M.get_after_load() return skynet.getenv('afterload') end ---获取cluster svr_id +---#desc 获取cluster svr_id function M.get_svr_id() return g_svr_id end ---获取cluster svrname +---#desc 获取cluster svrname function M.get_svr_name() return g_svr_name end diff --git a/lualib/skynet-fly/utils/file_util.lua b/lualib/skynet-fly/utils/file_util.lua index e7ff3583..0559036e 100644 --- a/lualib/skynet-fly/utils/file_util.lua +++ b/lualib/skynet-fly/utils/file_util.lua @@ -1,3 +1,12 @@ +---#API +---#content --- +---#content title: file_util file相关 +---#content date: 2024-06-29 22:00:00 +---#content categories: ["skynet_fly API 文档","工具函数"] +---#content category_bar: true +---#content tags: [skynet_fly_api] +---#content --- +---#content [file_util](https://github.com/huahua132/skynet_fly/blob/master/lualib/skynet-fly/utils/file_util.lua) local lfs = require "lfs" local string_util = require "skynet-fly.utils.string_util" @@ -10,8 +19,10 @@ local io = io local M = {} ---递归遍历目录 ---max_depth 最大遍历深度 nil表示到底 +---#desc 递归遍历目录 +---@param path_url string 路径 +---@param max_depth number|nil 最大深度 nil表示到底 +---@return function 遍历函数 function M.diripairs(path_url, max_depth) local stack = {} @@ -54,6 +65,9 @@ function M.diripairs(path_url, max_depth) end end +---#desc skynet_fly luapath 的创建函数 +---@param skynet_fly_path string 路径 +---@return string lua_path function M.create_luapath(skynet_fly_path) local server_path = './' local skynet_path = M.path_join(skynet_fly_path, '/skynet') @@ -83,7 +97,9 @@ function M.create_luapath(skynet_fly_path) return lua_path end ---打开并读取文件 +---#desc 读取整个文件内容 +---@param file_path string 文件路径 +---@return string content内容 function M.readallfile(file_path) local file = io.open(file_path,'r') assert(file,"can`t open file_path " .. tostring(file_path)) @@ -92,7 +108,8 @@ function M.readallfile(file_path) return str end ---获取当前目录文件夹名称 +---#desc 获取当前目录文件夹名称 +---@return string 文件夹名称 function M.get_cur_dir_name() local curdir = lfs.currentdir() local strsplit = nil @@ -106,7 +123,10 @@ function M.get_cur_dir_name() return strsplit[#strsplit] end ---路径拼接 +---#desc 路径拼接 +---@param a string 路径1 +---@param b string 路径2 +---@return string 拼接后路径 function M.path_join(a,b) if a:sub(-1) == "/" then if b:sub(1, 1) == "/" then @@ -121,13 +141,19 @@ function M.path_join(a,b) end -- converts gin style to openapi style. /users/:name -> /users/{name} +---#desc gin风格转换成 openapi风格 /users/:name -> /users/{name} +---@param path string 路径 +---@return string 转换后路径 function M.convert_path(path) path = string.gsub(path, ":([^/]*)", "{%1}") path = string.gsub(path, "%*(%w*)", "{*%1}") return path end ---递归创建文件夹 +---#desc 递归创建文件夹 +---@param path string 路径 +---@return boolean|nil 结果 +---@return string? 失败原因 function M.mkdir(path) -- 逐层获取并创建每个文件夹 local current_path = "" @@ -148,21 +174,32 @@ function M.mkdir(path) return true end +---#desc Linux文件夹风格转成windows +---@param linux_path string 路径 +---@return string 路径 function M.convert_linux_to_windows_relative(linux_path) -- 替换斜杠为反斜杠 local windows_path = linux_path:gsub("/", "\\") return windows_path end +---#desc windows文件夹风格转成linux +---@param window_path string 路径 +---@return string 路径 function M.convert_windows_to_linux_relative(window_path) local linux_path = window_path:gsub("\\", "/") return linux_path end +---#desc 是否windows系统 +---@return boolean 结果 function M.is_window() return package.config:sub(1, 1) == '\\' end +---#desc 文件拷贝工具 +---@param is_dir boolean? 是否路径 +---@return table obj set_source_target = function(source, target)设置来源目标 execute = function()执行拷贝 function M.new_copy_file(is_dir) local cmd = nil --windows @@ -208,7 +245,11 @@ function M.new_copy_file(is_dir) } end ---递归删除文件夹 +---#desc 删除文件夹 +---@param dir_path string 路径 +---@return boolean? suc +---@return exitcode? exitcode +---@return integer? code function M.rmdir(dir_path) if M.is_window() then return os.execute(string.format('rmdir /s /q "%s"', dir_path)) diff --git a/lualib/skynet-fly/utils/math_util.lua b/lualib/skynet-fly/utils/math_util.lua index 4d501aa4..1aa4c832 100644 --- a/lualib/skynet-fly/utils/math_util.lua +++ b/lualib/skynet-fly/utils/math_util.lua @@ -1,3 +1,12 @@ +---#API +---#content --- +---#content title: math_util math相关 +---#content date: 2024-06-29 22:00:00 +---#content categories: ["skynet_fly API 文档","工具函数"] +---#content category_bar: true +---#content tags: [skynet_fly_api] +---#content --- +---#content [math_util](https://github.com/huahua132/skynet_fly/blob/master/lualib/skynet-fly/utils/math_util.lua) local math = math local tonumber = tonumber local string = string @@ -6,7 +15,12 @@ local sformat = string.format local M = {} ---计算2个经纬度的距离 +---#desc 计算2个经纬度的距离 +---@param lon1 number 位置1经度 +---@param lat1 number 位置1纬度 +---@param lon2 number 位置2经度 +---@param lat2 number 位置2纬度 +---@return number 距离(米) function M.haversine(lon1,lat1,lon2,lat2) local dlat = math.pi / 180 * (lat2 - lat1) local dlon = math.pi / 180 * (lon2 - lon1) @@ -17,7 +31,11 @@ function M.haversine(lon1,lat1,lon2,lat2) return 6371000 * c end ---对比大小 +---#desc 获取min max +---@param min number 值1 +---@param max number 值2 +---@return number 较小的 +---@return number 较大的 function M.get_min_max(min,max) if min <= max then return min,max @@ -26,14 +44,17 @@ function M.get_min_max(min,max) end end -function M.number_div_str(num,div_num) - num = tonumber(num) +---#desc num/div_num 并保留div_num位小数 +---@param num number 值1 +---@param div_num number 值2 +---@return string 较小的 +function M.number_div_str(num, div_num) local format = '%0.' .. div_num .. 'f' local div = 1 for i = 1,div_num do div = div * 10 end - local res = string.format(format,num / div) + local res = string.format(format, num / div) local result = string.match(res, "^(.-)0*$") -- 使用正则表达式匹配去掉0 if result:sub(-1) == "." then -- 如果最后一位是小数点 result = result:sub(1, -2) -- 去掉小数点 @@ -56,36 +77,50 @@ M.uint32max = (1 << 32) - 1 M.int64min = -(1 << 63) M.int64max = (1 << 63) - 1 +---#desc 是否有效的int8 +---@param num number function M.is_vaild_int8(num) if type(num) ~= 'number' then return false end return num >= M.int8min and num <= M.int8max end +---#desc 是否有效的uint8 +---@param num number function M.is_vaild_uint8(num) if type(num) ~= 'number' then return false end return num >= M.uint8min and num <= M.uint8max end +--@desc 是否有效的int16 +---@param num number function M.is_vaild_int16(num) if type(num) ~= 'number' then return false end return num >= M.int16min and num <= M.int16max end +---#desc 是否有效的uint16 +---@param num number function M.is_vaild_uint16(num) if type(num) ~= 'number' then return false end return num >= M.uint16min and num <= M.uint16max end +---#desc 是否有效的int32 +---@param num number function M.is_vaild_int32(num) if type(num) ~= 'number' then return false end return num >= M.int32min and num <= M.int32max end +---#desc 是否有效的uint32 +---@param num number function M.is_vaild_uint32(num) if type(num) ~= 'number' then return false end return num >= M.uint32min and num <= M.uint32max end +---#desc 是否有效的int64 +---@param num number function M.is_vaild_int64(num) if type(num) ~= 'number' then return false end return num >= M.int64min and num <= M.int64max diff --git a/lualib/skynet-fly/utils/skynet_util.lua b/lualib/skynet-fly/utils/skynet_util.lua index c8d635e0..675488dd 100644 --- a/lualib/skynet-fly/utils/skynet_util.lua +++ b/lualib/skynet-fly/utils/skynet_util.lua @@ -1,3 +1,12 @@ +---#API +---#content --- +---#content title: skynet_util skynet相关 +---#content date: 2024-06-29 22:00:00 +---#content categories: ["skynet_fly API 文档","工具函数"] +---#content category_bar: true +---#content tags: [skynet_fly_api] +---#content --- +---#content [skynet_util](https://github.com/huahua132/skynet_fly/blob/master/lualib/skynet-fly/utils/skynet_util.lua) local skynet = require "skynet" local module_info = require "skynet-fly.etc.module_info" local log = require "skynet-fly.log" @@ -27,10 +36,8 @@ local function rsp_retpack(arg1, ...) retpack(arg1, ...) end ---常用的lua消息处理函数 ---[[ - cmd_func 函数表 -]] +---#desc 注册lua消息处理函数 +---@param cmd_func table 函数表 function M.lua_dispatch(cmd_func) assert(not g_is_regiter, "repeat lua_dispatch") @@ -49,6 +56,8 @@ function M.lua_dispatch(cmd_func) end) end +---#desc 注册lua消息处理函数(带source) +---@param cmd_func table 函数表 function M.lua_src_dispatch(cmd_func) assert(not g_is_regiter, "repeat lua_src_dispatch") g_is_regiter = true @@ -67,7 +76,8 @@ function M.lua_src_dispatch(cmd_func) end) end ---用于转换成number的服务地址 比如 :00000001 转成 1 +---#desc 用于转换成number的服务地址 比如 :00000001 转成 1 +---@param name string 名称 function M.number_address(name) local t = type(name) if t == "number" then @@ -98,7 +108,9 @@ old_skynet_info_func(function() return json.encode(info) end) ---注册info_name信息的生成函数 +---#desc 注册info_name信息的生成函数 +---@param info_name string 名称 +---@param info_func function 生成函数 function M.register_info_func(info_name,info_func) assert(type(info_func) == 'function', "not is function") assert(type(info_name) == 'string',"not is string") @@ -107,19 +119,23 @@ function M.register_info_func(info_name,info_func) g_info_func_map[info_name] = info_func end ---设置服务的CMD表 +---#desc 设置服务的CMD表 +---@param CMD table 表 function M.set_cmd_table(CMD) g_CMD = CMD end ---扩展CMD函数 +---#desc 扩展CMD函数 +---@param cmd_name string 命令名称 +---@param func function 对应函数 function M.extend_cmd_func(cmd_name, func) assert(g_CMD, "please set_cmd_table") assert(not g_CMD[cmd_name], "exists cmd_name " .. tostring(cmd_name)) g_CMD[cmd_name] = func end ---是否可热更服务 +---#desc 是否可热更服务 +---@return boolean 结果 function M.is_hot_container_server() local base_info = module_info.get_base_info() if base_info.index then --是可热更服务 @@ -131,7 +147,9 @@ end local g_shutdown_func_map = {} ---注册关服处理函数 +---#desc 注册关服处理函数 +---@param func function 函数 +---@param sort_weight number 排序权重 function M.reg_shutdown_func(func, sort_weight) sort_weight = sort_weight or 0 assert(type(func) == 'function', "not function") diff --git a/lualib/skynet-fly/utils/string_util.lua b/lualib/skynet-fly/utils/string_util.lua index 466e766c..7671165b 100644 --- a/lualib/skynet-fly/utils/string_util.lua +++ b/lualib/skynet-fly/utils/string_util.lua @@ -1,3 +1,12 @@ +---#API +---#content --- +---#content title: string_util string相关 +---#content date: 2024-06-29 22:00:00 +---#content categories: ["skynet_fly API 文档","工具函数"] +---#content category_bar: true +---#content tags: [skynet_fly_api] +---#content --- +---#content [string_util](https://github.com/huahua132/skynet_fly/blob/master/lualib/skynet-fly/utils/string_util.lua) local M = {} local tremove = table.remove @@ -8,14 +17,11 @@ local next = next local pairs = pairs local strgsub = string.gsub local sfind = string.find ---[[ - 函数作用域:M 的成员函数 - 函数名称: split - 描述:字符串分割,可以嵌套分割 例如:split('1:2_3:4','_',':') res = {{1,2},{3,4}} - 参数: - - inputstr (string): 被分割字符串 - - ... 分隔符列表 -]] + +---#desc 字符串分割,可以嵌套分割 例如:split('1:2_3:4','_',':') res = {{1,2},{3,4}} +---@param inputstr string 被分割字符串 +---@param ... string 分隔符列表 +---@return table|string 分割结果 function M.split(inputstr, ...) local seps = {...} local sep = tremove(seps,1) @@ -48,9 +54,12 @@ local escape_map = { ['"'] = '\\"', } ---防sql注入 +---#desc 防sql注入 +---@param str string sql语句串 +---@return string 防sql注入转换后的 function M.quote_sql_str(str) - return strgsub(str, "[\0\b\n\r\t\26\\\'\"]", escape_map) + local str = strgsub(str, "[\0\b\n\r\t\26\\\'\"]", escape_map) + return str end return M \ No newline at end of file diff --git a/lualib/skynet-fly/utils/table_util.lua b/lualib/skynet-fly/utils/table_util.lua index 1e7815b9..69bcf1a7 100644 --- a/lualib/skynet-fly/utils/table_util.lua +++ b/lualib/skynet-fly/utils/table_util.lua @@ -1,3 +1,12 @@ +---#API +---#content --- +---#content title: table_util table相关 +---#content date: 2024-06-29 22:00:00 +---#content categories: ["skynet_fly API 文档","工具函数"] +---#content category_bar: true +---#content tags: [skynet_fly_api] +---#content --- +---#content [table_util](https://github.com/huahua132/skynet_fly/blob/master/lualib/skynet-fly/utils/table_util.lua) local json = require "cjson" local tinsert = table.insert @@ -15,14 +24,12 @@ local getmetatable = getmetatable local M = {} ---[[ - 函数作用域:M 的成员函数 - 函数名称: is_loop_table - 描述:检测表是否有环引用 - 参数: - - check_table (table): 目标表 - - is_route (boolean) :是否需要返回环路径 -]] +---#desc 检测表是否有环引用 +---@param check_table table 目标表 +---@param is_route boolean 是否需要返回环路径 +---@return boolean 是否出现环引用 +---@return string|nil 环路径 +---@return string|nil 环路径 function M.is_loop_table(check_table,is_route) assert(type(check_table) == 'table') local src_dest = {} @@ -77,13 +84,9 @@ function M.is_loop_table(check_table,is_route) return false end ---[[ - 函数作用域:M 的成员函数 - 函数名称: dump - 描述:不会死循环的表dump - 参数: - - tab (table): 目标表 -]] +---#desc 不会死循环的表dump +---@param tab table 目标表 +---@return string dump后的内容 function M.dump(tab) local filter = {} @@ -142,19 +145,10 @@ function M.dump(tab) return dp(nil,tab,0) end ---[[ - 函数作用域:M 的成员函数 - 函数名称: check_def_table - 描述: 检测2张表有什么同 - 共有4种不同 - 类型不同:typedef - 相对于old_t有新增: add - 相对于old_t有删除: reduce - 值不同:valuedef - 参数: - - new_t (table): 新表 - - old_t (table): 旧表 -]] +---#desc 检测2张表有什么同 共有4种不同 类型不同:typedef 相对于old_t有新增: add 相对于old_t有删除: reduce 值不同:valuedef +---@param new_t table 新表 +---@param old_t table 旧表 +---@return table 不同的描述信息 function M.check_def_table(new_t,old_t) assert(type(new_t) == 'table' and type(old_t) == 'table') @@ -198,13 +192,9 @@ function M.check_def_table(new_t,old_t) return check_func(new_t,old_t) end ---[[ - 函数作用域:M 的成员函数 - 函数名称: def_tostring - 描述:把check_def_table返回值转换成string - 参数: - - def (table): check_def_table返回值 -]] +---#desc 把check_def_table返回值转换成string +---@param def table check_def_table返回值 +---@return string string格式 function M.def_tostring(def) assert(type(def) == 'table') local function tstring(dk,dt) @@ -240,15 +230,11 @@ function M.def_tostring(def) return tstring(nil,def) end ---[[ - 函数作用域:M 的成员函数 - 函数名称: update_tab_by_def - 描述:根据check_def_table的结果去更新旧值,change_flags表面哪些flag需要更新成新值 - 参数: - - def (table): check_def_table返回值 - - old_t(table):旧表 - - change_flags(table):需要更新的flags 可选 typedef add reduce valuedef -]] +---#desc 根据check_def_table的结果去更新旧值,change_flags表面哪些flag需要更新成新值 +---@param def table check_def_table返回值 +---@param old_t table 旧表 +---@param change_flags table 需要更新的flags 可选 typedef add reduce valuedef +---@return table 更新后的表 function M.update_tab_by_def(def,old_t,change_flags) assert(type(def) == 'table') assert(type(old_t) == 'table') @@ -280,7 +266,10 @@ function M.update_tab_by_def(def,old_t,change_flags) return update(def,old_t) end ---通用的排序后遍历 +---#desc 通用的排序后遍历 对比v +---@param t table 需要排序的表 +---@param comp function|nil 比较函数 +---@return function 遍历函数 function M.sort_ipairs(t,comp) assert(t) assert(not comp or type(comp) == 'function') @@ -307,7 +296,10 @@ function M.sort_ipairs(t,comp) end end ---通用的排序后遍历 对比k +---#desc 通用的排序后遍历 对比k +---@param t table 需要排序的表 +---@param comp function|nil 比较函数 +---@return function 遍历函数 function M.sort_ipairs_byk(t,comp) assert(t) assert(not comp or type(comp) == 'function') @@ -332,7 +324,9 @@ function M.sort_ipairs_byk(t,comp) end end ---写luafile mode = G M +---#desc table转成lua文件格式的string +---@param mode string G表示全局模式 M表示模块模式 +---@return string 转换后的string function M.table_to_luafile(mode,tab) local ret_str = "" local function to_file_str(pre_k,pre_v,level) @@ -402,7 +396,9 @@ function M.table_to_luafile(mode,tab) return ret_str end ---map按 字符编码顺序排序后遍历 +---#desc map按 字符编码顺序排序后遍历 +---@param map table 遍历的表 +---@return function 遍历函数 function M.kvsortipairs(map) local list = {} local k_type_map = {} @@ -430,7 +426,9 @@ function M.kvsortipairs(map) end end --- 深拷贝 +---#desc 深拷贝(考虑原表情况) +---@param orig table +---@return table 拷贝后的表 function M.deep_copy(orig) local copies = {} local function copy_recursive(orig) @@ -455,7 +453,9 @@ function M.deep_copy(orig) return copy_recursive(orig) end --- copy简单copy +---#desc 拷贝(不考虑原表) +---@param tab table 表 +---@return table 拷贝后的表 function M.copy(tab) local t = {} for k, v in pairs(tab) do @@ -468,7 +468,10 @@ function M.copy(tab) return t end --- 按深度元素转成list +---#desc 按深度元素转成list +---@param tab table 原数据 +---@param depth number 转换深度 +---@return table 转换结果表 function M.depth_to_list(tab, depth) assert(depth > 0) local list1 = {tab} @@ -487,7 +490,10 @@ function M.depth_to_list(tab, depth) return list1 end ---是否在列表中 +---#desc 是否在列表中 +---@param list table 列表 +---@param v any 值 +---@return boolean 结果 function M.inlist(list, v) for i = 1,#list do local vv = list[i] @@ -499,7 +505,11 @@ function M.inlist(list, v) return false end ---查找在表中的位置 +---#desc 查找在表中的位置 +---@param list table 列表 +---@param v any 值 +---@param index number 起始索引 +---@return number|nil 存在返回目标位置,不存在返回nil function M.find_index(list, v, index) if index == nil then index = 1 @@ -516,7 +526,9 @@ function M.find_index(list, v, index) return nil end ---统计长度 +---@desc 统计表长度 +---@param tab table 表 +---@return number 长度 function M.count(tab) local c = 0 for _,_ in pairs(tab) do @@ -525,7 +537,9 @@ function M.count(tab) return c end ---合并table +---#desc 合并table (source合并进入target) +---@param target table 目标表 +---@param source table 来源表 function M.merge(target, source) for k,v in pairs(source) do target[k] = v diff --git a/lualib/skynet-fly/utils/time_util.lua b/lualib/skynet-fly/utils/time_util.lua index 8557d474..4f901f1a 100644 --- a/lualib/skynet-fly/utils/time_util.lua +++ b/lualib/skynet-fly/utils/time_util.lua @@ -1,12 +1,12 @@ ---@API ---@content --- ---@content title: time_util 时间相关 ---@content date: 2024-06-29 22:00:00 ---@content categories: ["skynet_fly API 文档","工具函数"] ---@content category_bar: true ---@content tags: [skynet_fly_api] ---@content --- ---@content [time_util](https://github.com/huahua132/skynet_fly/blob/master/lualib/skynet-fly/utils/time_util.lua) +---#API +---#content --- +---#content title: time_util 时间相关 +---#content date: 2024-06-29 22:00:00 +---#content categories: ["skynet_fly API 文档","工具函数"] +---#content category_bar: true +---#content tags: [skynet_fly_api] +---#content --- +---#content [time_util](https://github.com/huahua132/skynet_fly/blob/master/lualib/skynet-fly/utils/time_util.lua) local string_util = require "skynet-fly.utils.string_util" local skynet local tonumber = tonumber @@ -25,8 +25,9 @@ local M = { } local starttime ---@desc 获取当前时间戳 ---@return number 时间戳(秒*100) + +---#desc 获取当前时间戳 +---@return number 时间戳(秒*100) function M.skynet_int_time() skynet = skynet or require "skynet" if not starttime then @@ -35,24 +36,26 @@ function M.skynet_int_time() return skynet.now() + starttime end ---@desc 获取当前时间戳 ---@return number 时间戳(秒) +---#desc 获取当前时间戳 +---@return number 时间戳(秒) function M.time() return math.floor(M.skynet_int_time() / 100) end ---@desc 获取当前日期 ---@return table 日期格式的table{year=2025,month=1,day=11,hour=18,min=12,sec=50} +---#desc 获取当前日期 +---@return table 日期格式的table{year=2025,month=1,day=11,hour=18,min=12,sec=50} function M.date(time) time = time or M.time() - return os.date("*t",M.time()) +---@diagnostic disable-next-line: return-type-mismatch + return os.date("*t", M.time()) end ---@desc string格式的时间转换成date日期table 2023:10:26 19:22:50 ---@param string str 被分割的时间格式字符串 ---@param string split1 分割符1 默认" " ---@param string split2 分割符2 默认 ":" ---@return table 分割后的内容 +---#desc string格式的时间转换成date日期table 2023:10:26 19:22:50 +---@param str string 被分割的时间格式字符串 +---@param split1 string 分割符1 默认" " +---@param split2 string 分割符2 默认 ":" +---@return table|nil 分割后的内容 +---@return string? 失败原因 function M.string_to_date(str, split1, split2) split1 = split1 or " " split2 = split2 or ":" @@ -114,7 +117,8 @@ function M.string_to_date(str, split1, split2) sec = sec, } - os.time(date) +---@diagnostic disable-next-line: discard-returns + os.time(date) --用于纠正date,比如1月33 会纠正到2月 if date.day ~= day then --这个月没有这一天 return nil, "not day[" .. day .. "]" end @@ -122,31 +126,32 @@ function M.string_to_date(str, split1, split2) return date end ---适配当月某一天 ---@desc 适配当月到某一天,不存在,适配到最后一天,比如2月只有28或者29,当输入30或者31将适配到28或者29天 ---@param table date[os.date] 日期 ---@param number day[1,31] 当月哪天 +---#desc 适配当月到某一天,不存在,适配到最后一天,比如2月只有28或者29,当输入30或者31将适配到28或者29天 +---@param date table 日期(os.date) +---@param day number 当月哪天(1,31) function M.month_day(date, day) assert(day >= 1 and day <= 31, "Must be within this range[1,31] day=" .. tostring(day)) local year = date.year local month = date.month date.day = day - os.time(date) +---@diagnostic disable-next-line: discard-returns + os.time(date) --用于纠正date,比如1月33 会纠正到2月 while date.day ~= day do day = day - 1 date.day = day date.month = month date.year = year - os.time(date) +---@diagnostic disable-next-line: discard-returns + os.time(date) --用于纠正date,比如1月33 会纠正到2月 end end ---@desc 获取某天某个时间点的时间戳 比如昨天 8点12分50 参数就是 -1,8,12,50 明天 0点0分0秒 就是 1,0,0,0 ---@param number day 相差几天 ---@param number hour[0,23] 几时 ---@param number min[0,59] 几分 ---@param number sec[0,59] 几秒 ---@return number 时间戳 +---#desc 获取某天某个时间点的时间戳 比如昨天 8点12分50 参数就是 -1,8,12,50 明天 0点0分0秒 就是 1,0,0,0 +---@param day number 相差几天 +---@param hour number 几时[0,23] +---@param min number 几分[0,59] +---@param sec number 几秒[0,59] +---@return number 时间戳 function M.day_time(day, hour, min, sec, curtime) assert(day, "not day param") assert(hour >= 0 and hour <= 23, "Must be within this range[0,23] hour=" .. tostring(hour)) @@ -162,9 +167,9 @@ function M.day_time(day, hour, min, sec, curtime) return os.time(date) end ---@desc 获取下一个每分的几秒时间戳 ---@param number sec[0,59] 几秒 ---@return number 时间戳 +---#desc 获取下一个每分的几秒时间戳 +---@param sec number 几秒[0,59] +---@return number 时间戳 function M.every_min(sec) assert(sec >= 0 and sec <= 59, "Must be within this range[0,59] sec=" .. tostring(sec)) local cur_time = M.time() @@ -180,10 +185,10 @@ function M.every_min(sec) end end ---@desc 获取下一个每时的几分几秒时间戳 ---@param number min[0,59] 几分 ---@param number sec[0,59] 几秒 ---@return number 时间戳 +---#desc 获取下一个每时的几分几秒时间戳 +---@param min number 几分 [0,59] +---@param sec number 几秒 [0,59] +---@return number 时间戳 function M.every_hour(min, sec) assert(min >= 0 and min <= 59, "Must be within this range[0,59] min=" .. tostring(min)) assert(sec >= 0 and sec <= 59, "Must be within this range[0,59] sec=" .. tostring(sec)) @@ -199,11 +204,11 @@ function M.every_hour(min, sec) end end ---@desc 获取下一个每天的几点几分几秒时间戳 ---@param number hour[0,23] 几时 ---@param number min[0,59] 几分 ---@param number sec[0,59] 几秒 ---@return number 时间戳 +---#desc 获取下一个每天的几点几分几秒时间戳 +---@param hour number 几时[0,23] +---@param min number 几分[0,59] +---@param sec number 几秒[0,59] +---@return number 时间戳 function M.every_day(hour, min, sec) assert(hour >= 0 and hour <= 23, "Must be within this range[0,23] hour=" .. tostring(hour)) assert(min >= 0 and min <= 59, "Must be within this range[0,59] min=" .. tostring(min)) @@ -221,12 +226,12 @@ function M.every_day(hour, min, sec) end end ---@desc 获取下一个周几几点几分几秒的时间戳 ---@param number wday[1,7] 周几 ---@param number hour[0,23] 几时 ---@param number min[0,59] 几分 ---@param number sec[0,59] 几秒 ---@return number 时间戳 +---#desc 获取下一个周几几点几分几秒的时间戳 +---@param wday number 周几[1,7] +---@param hour number 几时[0,23] +---@param min number 几分[0,59] +---@param sec number 几秒[0,59] +---@return number 时间戳 function M.every_week(wday, hour, min, sec) assert(wday >= 1 and wday <= 7, "Must be within this range[1,7] wday=" .. tostring(wday)) assert(hour >= 0 and hour <= 23, "Must be within this range[0,23] hour=" .. tostring(hour)) @@ -249,12 +254,12 @@ function M.every_week(wday, hour, min, sec) return next_time end ---@desc 获取下一个每月的第几天几时几分几秒的时间戳,如果单月没有该天,适配到最后一天 ---@param number day[1,31] 第几天 ---@param number hour[0,23] 几时 ---@param number min[0,59] 几分 ---@param number sec[0,59] 几秒 ---@return number 时间戳 +---#desc 获取下一个每月的第几天几时几分几秒的时间戳,如果单月没有该天,适配到最后一天 +---@param day number 第几天[1,31] +---@param hour number 几时[0,23] +---@param min number 几分[0,59] +---@param sec number 几秒[0,59] +---@return number 时间戳 function M.every_month(day, hour, min, sec) assert(day >= 1 and day <= 31, "Must be within this range[1,31] day=" .. tostring(day)) assert(hour >= 0 and hour <= 23, "Must be within this range[0,23] hour=" .. tostring(hour)) @@ -278,13 +283,13 @@ function M.every_month(day, hour, min, sec) end end ---@desc 获取下一个每年的第几月第几天几时几分几秒的时间戳,如果单月没有该天,适配到最后一天 ---@param number month[1,12] 第几月 ---@param number day[1,31] 第几天 ---@param number hour[0,23] 几时 ---@param number min[0,59] 几分 ---@param number sec[0,59] 几秒 ---@return number 时间戳 +---#desc 获取下一个每年的第几月第几天几时几分几秒的时间戳,如果单月没有该天,适配到最后一天 +---@param month number 第几月[1,12] +---@param day number 第几天[1,31] +---@param hour number 几时[0,23] +---@param min number 几分[0,59] +---@param sec number 几秒[0,59] +---@return number 时间戳 function M.every_year(month, day, hour, min, sec) assert(month >= 1 and month <= 12, "Must be within this range[1,12] month=" .. tostring(month)) assert(day >= 1 and day <= 31, "Must be within this range[1,31] day=" .. tostring(day)) @@ -311,12 +316,12 @@ function M.every_year(month, day, hour, min, sec) end end ---@desc 获取下一个每年的第几天几时几分几秒的时间戳 ---@param number yday[1,366] 第几天 ---@param number hour[0,23] 几时 ---@param number min[0,59] 几分 ---@param number sec[0,59] 几秒 ---@return number 时间戳 +---#desc 获取下一个每年的第几天几时几分几秒的时间戳 +---@param yday number 第几天[1,366] +---@param hour number 几时[0,23] +---@param min number 几分[0,59] +---@param sec number 几秒[0,59] +---@return number 时间戳 function M.every_year_day(yday, hour, min, sec) assert(yday >= 1 and yday <= 366, "Must be within this range[1,366] yday=" .. tostring(yday)) assert(hour >= 0 and hour <= 23, "Must be within this range[0,23] hour=" .. tostring(hour)) @@ -339,11 +344,11 @@ function M.every_year_day(yday, hour, min, sec) return next_time end ---@desc 是否跨天 ---@param number pre_time 之前记录的时间 ---@param number cur_time 当前时间(可选 默认当前时间) ---@param number hour[0,23] 几点算一天的开始(可选 默认零点) ---@return bool 是否跨天 +---#desc 是否跨天 +---@param pre_time number 之前记录的时间 +---@param cur_time number 当前时间(可选 默认当前时间) +---@param hour number 几点[0,23]算一天的开始(可选 默认零点) +---@return boolean 是否跨天 function M.is_cross_day(pre_time, cur_time, hour) hour = hour or 0 assert(hour >= 0 and hour <= 23, "Must be within this range[0,23] hour=" .. tostring(hour)) @@ -359,11 +364,11 @@ function M.is_cross_day(pre_time, cur_time, hour) return false end ---@desc 计算pre_time(更小) cur_time(更大) 相差几天 ---@param number pre_time 之前记录的时间 ---@param number cur_time 当前时间(可选 默认当前时间) ---@param number hour[0,23] 几点算一天的开始(可选 默认零点) ---@return number 相差几天 +---#desc 计算pre_time(更小) cur_time(更大) 相差几天 +---@param pre_time number 之前记录的时间 +---@param cur_time number 当前时间(可选 默认当前时间) +---@param hour number 几点[0,23]算一天的开始(可选 默认零点) +---@return number 相差几天 function M.diff_day(pre_time, cur_time, hour) hour = hour or 0 assert(hour >= 0 and hour <= 23, "Must be within this range[0,23] hour=" .. tostring(hour))