summaryrefslogtreecommitdiff
path: root/meta/3rd/skynet/library/skynet.lua
diff options
context:
space:
mode:
Diffstat (limited to 'meta/3rd/skynet/library/skynet.lua')
-rw-r--r--meta/3rd/skynet/library/skynet.lua91
1 files changed, 54 insertions, 37 deletions
diff --git a/meta/3rd/skynet/library/skynet.lua b/meta/3rd/skynet/library/skynet.lua
index 4fdb29d0..2ce96339 100644
--- a/meta/3rd/skynet/library/skynet.lua
+++ b/meta/3rd/skynet/library/skynet.lua
@@ -12,35 +12,35 @@
---|+'"debug"'
---|+'"trace"'
---@alias SERVICEADDR '".servicename"' | '":0000000C"' | integer
----@alias MESSAGEHANDLER fun(session:integer, source:integer, ...)
+---@alias MESSAGEHANDLER fun(session:integer, source:integer, cmd:string, ...)
local skynet = {
- -- read skynet.h
- PTYPE_TEXT = 0,
- PTYPE_RESPONSE = 1,
- PTYPE_MULTICAST = 2,
- PTYPE_CLIENT = 3,
- PTYPE_SYSTEM = 4,
- PTYPE_HARBOR = 5,
- PTYPE_SOCKET = 6,
- PTYPE_ERROR = 7,
- PTYPE_QUEUE = 8, -- used in deprecated mqueue, use skynet.queue instead
- PTYPE_DEBUG = 9,
- PTYPE_LUA = 10,
- PTYPE_SNAX = 11,
- PTYPE_TRACE = 12, -- use for debug trace
- PNAME_TEXT = "text",
- PNAME_RESPONSE = "response",
- PNAME_MULTICAST = "muliticast",
- PNAME_CLIENT = "client",
- PNAME_SYSTEM = "system",
- PNAME_HARBOR = "harbor",
- PNAME_SOCKET = "socket",
- PNAME_ERROR = "error",
- PNAME_QUEUE = "queue",
- PNAME_DEBUG = "debug",
- PNAME_LUA = "lua",
- PNAME_SNAX = "snax",
- PNAME_TRACE = "trace",
+ -- read skynet.h
+ PTYPE_TEXT = 0,
+ PTYPE_RESPONSE = 1,
+ PTYPE_MULTICAST = 2,
+ PTYPE_CLIENT = 3,
+ PTYPE_SYSTEM = 4,
+ PTYPE_HARBOR = 5,
+ PTYPE_SOCKET = 6,
+ PTYPE_ERROR = 7,
+ PTYPE_QUEUE = 8, -- used in deprecated mqueue, use skynet.queue instead
+ PTYPE_DEBUG = 9,
+ PTYPE_LUA = 10,
+ PTYPE_SNAX = 11,
+ PTYPE_TRACE = 12, -- use for debug trace
+ PNAME_TEXT = "text",
+ PNAME_RESPONSE = "response",
+ PNAME_MULTICAST = "muliticast",
+ PNAME_CLIENT = "client",
+ PNAME_SYSTEM = "system",
+ PNAME_HARBOR = "harbor",
+ PNAME_SOCKET = "socket",
+ PNAME_ERROR = "error",
+ PNAME_QUEUE = "queue",
+ PNAME_DEBUG = "debug",
+ PNAME_LUA = "lua",
+ PNAME_SNAX = "snax",
+ PNAME_TRACE = "trace",
}
@@ -97,9 +97,12 @@ end
---* 向当前会话返回数据
---* 会自动获取当前线程所关联的会话ID和返回地址
----* 由于某些历史原因(早期的 skynet 默认消息类别是文本,而没有经过特殊编码),这个 API 被设计成传递一个 C 指针和长度,而不是经过当前消息的 pack 函数打包。或者你也可以省略 size 而传入一个字符串。
+---* 由于某些历史原因(早期的 skynet 默认消息类别是文本,而没有经过特殊编码),
+---这个 API 被设计成传递一个 C 指针和长度,而不是经过当前消息的 pack 函数打包。或者你也可以省略 size 而传入一个字符串。
---* 在同一个消息处理的 coroutine 中只可以被调用一次,多次调用会触发异常。
----* 你需要挂起一个请求,等将来时机满足,再回应它。而回应的时候已经在别的 coroutine 中了。针对这种情况,你可以调用 skynet.response(skynet.pack) 获得一个闭包,以后调用这个闭包即可把回应消息发回。这里的参数 skynet.pack 是可选的,你可以传入其它打包函数,默认即是 skynet.pack 。
+---* 你需要挂起一个请求,等将来时机满足,再回应它。而回应的时候已经在别的 coroutine 中了。
+---针对这种情况,你可以调用 skynet.response(skynet.pack) 获得一个闭包,以后调用这个闭包即可把回应消息发回。
+---这里的参数 skynet.pack 是可选的,你可以传入其它打包函数,默认即是 skynet.pack 。
---@param msg lightuserdata
---@param sz integer
function skynet.ret(msg, sz)
@@ -110,8 +113,8 @@ function skynet.retpack(...)
end
---返回一个闭包以进行延迟回应
----@param pack fun(...):string| userdata,sz
----@return fun(isOK:boolean | 'TEST', ...):
+---@param pack fun(...):string|lightuserdata,integer #默认会用 skynet.pack
+---@return fun(isOK:boolean | 'TEST', ...)
function skynet.response(pack)
end
@@ -138,7 +141,9 @@ end
--------------------序列化相关API---------------
---* 可以将一组 lua 对象序列化为一个由 malloc 分配出来的 C 指针加一个数字长度
----* 你需要考虑 C 指针引用的数据块何时释放的问题。当然,如果你只是将 skynet.pack 填在消息处理框架里时,框架解决了这个管理问题。skynet 将 C 指针发送到其他服务,而接收方会在使用完后释放这个指针。
+---* 你需要考虑 C 指针引用的数据块何时释放的问题。当然,如果你只是将 skynet.pack 填在消息
+--- 处理框架里时,框架解决了这个管理问题。skynet 将 C 指针发送到其他服务,而接收方会在使用完
+--- 后释放这个指针。
---@vararg any
---@return lightuserdata, number
function skynet.pack(...)
@@ -159,8 +164,8 @@ function skynet.unpack(msg, sz)
end
---* 将 C 指针转换成 Lua 字符串
----@param msg lightuserdata
----@param sz number
+---@param msg lightuserdata|string
+---@param sz number #如果是传递的 string,则不需要 此参数
---@return string
function skynet.tostring(msg, sz)
end
@@ -176,7 +181,8 @@ end
---* **非阻塞API**
---* 这条 API 可以把一条类别为 typename 的消息发送给 address 。它会先经过事先注册的 pack 函数打包 ... 的内容。
---* 实际上也是利用了 c.send 不过传送的会话ID是0
----* 接收端接收完毕消息后,默认情况下,消息会由 skynet 释放。具体可以查看 skynet-server.c 中的 dispatch_message 的代码
+---* 接收端接收完毕消息后,默认情况下,消息会由 skynet 释放。
+--- 具体可以查看 skynet-server.c 中的 dispatch_message 的代码
---@param addr SERVICEADDR
---@param typename string @类型名
---@vararg any @传输的数据
@@ -239,7 +245,7 @@ end
function request:select(timeout)
end
----@param obj?
+---@param obj? table
---@return request
function skynet.request(obj)
end
@@ -286,6 +292,8 @@ end
--- 用于启动一个新的 Lua 服务。name 是脚本的名字(不用写 .lua 后缀)。只有被启动的脚本的 start 函数返回后,这个 API 才会返回启动的服务的地址,这是一个阻塞 API 。如果被启动的脚本在初始化环节抛出异常,或在初始化完成前就调用 skynet.exit 退出,skynet.newservice 都会抛出异常。如果被启动的脚本的 start 函数是一个永不结束的循环,那么 newservice 也会被永远阻塞住。
--- > 启动参数其实是以字符串拼接的方式传递过去的。所以不要在参数中传递复杂的 Lua 对象。接收到的参数都是字符串,且字符串中不可以有空格(否则会被分割成多个参数)。这种参数传递方式是历史遗留下来的,有很多潜在的问题。目前推荐的惯例是,让你的服务响应一个启动消息。在 newservice 之后,立刻调用 skynet.call 发送启动请求。
+---@param name string #脚本名字
+---@vararg string #可选参数
function skynet.newservice(name, ...)
end
@@ -475,25 +483,31 @@ function skynet.memlimit(bytes)
end
------------------以下是属于 skynet.manager 中的 api
+
+---* **skynet.manager API**
---* 启动一个C 服务,具体参数要看 C服务是怎么编写的
---@vararg any
function skynet.launch(...)
end
+---* **skynet.manager API**
--- 可以用来强制关闭别的服务。但强烈不推荐这样做。因为对象会在任意一条消息处理完毕后,毫无征兆的退出。所以推荐的做法是,发送一条消息,让对方自己善后以及调用 skynet.exit 。注:skynet.kill(skynet.self()) 不完全等价于 skynet.exit() ,后者更安全。
---@param name number|string
function skynet.kill(name)
end
+---* **skynet.manager API**
---* 向引擎发送一个 ABORT 命令,退出自身服务
function skynet.abort()
end
+---* **skynet.manager API**
---* 给服务注册一个名字
---@param name string
function skynet.register(name)
end
+---* **skynet.manager API**
---* 给服务命名 以 . 开头的名字是在同一 skynet 节点下有效的
---* skynet.name(name, skynet.self()) 和 skynet.register(name) 功能等价。
---@param name string
@@ -501,6 +515,7 @@ end
function skynet.name(name, handle)
end
+---* **skynet.manager API**
---* 将本服务实现为消息转发器,对一类消息进行转发
---* 设置指定类型的消息,不由 skynet 框架释放
---* 对于在 map 中的消息,不进行释放
@@ -510,12 +525,14 @@ end
function skynet.forward_type(map, start_func)
end
+---* **skynet.manager API**
---过滤消息再处理。(注:filter 可以将 type, msg, sz, session, source 五个参数先处理过再返回新的 5 个参数。)
---@param f any
---@param start_func any
function skynet.filter(f, start_func)
end
+---* **skynet.manager API**
---给当前 skynet 进程设置一个全局的服务监控。
---@param service any
---@param query any