V2RayGCon手册

Release Badge

全部函数

前面的示例脚本中像Signal:Stop()这样的语句,实际是调用了ILuaSignal.cs里面的bool Stop();Interfaces目录下的所有接口都可以像上面那样调用。例如:Misc:Sleep(1000)

控制服务器的脚本,通常从调用Server:GetAllServers()函数开始。
下面是一个选中所有ws.tls服务器的小脚本:

1
2
3
4
5
6
7
local coreServs = Server:GetAllServers()
for coreServ in Each(coreServs) do
    local coreState = coreServ:GetCoreStates()
    local summary = coreState:GetSummary()
    local isWsTls = string.startswith(summary, "vmess.ws.tls@")
    coreState:SetIsSelected(isWsTls ~= false and isWsTls ~= nil)
end

其中:

上面代码使用coreServcoreState这么奇怪的变量名是因为这两个关键字有代码提示。还有coreLoggercoreConfiger两个关键字也有代码提示。

V2RayGCon v1.8+引入了一个新的关键字wserv简化各模块调用。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
-- 重启第1个服务器.lua

-- 旧写法
local coreServ = Server:GetServerByIndex(1)
local coreState = coreServ:GetCoreStates()
local coreCtrl = coreServ:GetCoreCtrl()
local title = coreState:GetTitle()
print(title)
coreCtrl:RestartCore()

-- 新写法
local wserv = Server:GetServerByIndex(1):Wrap()
local title = wserv:GetTitle()
print(title)
wserv:RestartCore()

Wrap()的作用是把一个coreServ包装成一个IWrappedCoreServCtrl,然后可以省掉coreServ:GetCoreStates()这些步骤,直接调用各模块里面的函数。wserv:Unwrap()可以还原出coreServ。这层包装有性能损耗,一方面性能损耗巨大(多用一倍时间),另一方面性能损耗微乎其微(50万次函数调用才多用1秒,因为每次调用只有2μs),所以想用就用吧,不用太在意性能。

Last updated on 2 Feb 2020
Published on 2 Feb 2020
Edit on GitHub