
---@class mqtt_ioloop_options*
---@field timeout? number 网络操作超时时间，单位秒。
---@field sleep? number 每轮迭代后的休眠时间，单位秒。
---@field sleep_function? fun(seconds:number) 自定义休眠函数。

---@class mqtt_ioloop_module*
---@type mqtt_ioloop_module*
local M = {}

---@class mqtt_ioloop_object*
---@field args mqtt_ioloop_options*
---@field clients table
---@field running boolean 是否正在运行。
local mqtt_ioloop_object = {}

--- 创建 IO loop 实例。
---@param args? mqtt_ioloop_options* 创建参数。
---@return mqtt_ioloop_object* loop IO loop 实例。
function M.create(args) end

--- 获取默认 IO loop。
---@param autocreate? boolean 是否自动创建，默认为 true。
---@param args? mqtt_ioloop_options* 创建参数。
---@return mqtt_ioloop_object*? loop 默认 IO loop。
function M.get(autocreate, args) end

--- 添加 MQTT 客户端或循环函数。
---@param client mqtt_client_object*|function 客户端或循环函数。
---@return boolean ok 是否成功。
---@return string? errMsg 错误信息。
function mqtt_ioloop_object:add(client) end

--- 移除 MQTT 客户端或循环函数。
---@param client mqtt_client_object*|function 客户端或循环函数。
---@return boolean ok 是否成功。
---@return string? errMsg 错误信息。
function mqtt_ioloop_object:remove(client) end

--- 执行一轮 IO loop。
function mqtt_ioloop_object:iteration() end

--- 当前轮没有网络超时时执行短暂休眠。
function mqtt_ioloop_object:can_sleep() end

--- 运行到没有客户端或循环函数为止。
function mqtt_ioloop_object:run_until_clients() end

return M
