onSchemeCommand
Definition
-- @/lua/ge/extensions/core/commandhandler.lua:25
-- scheme commands come in as beamng:v1/startToolchainServer
local function onSchemeCommand(scheme, isStartingArg)
log('D', logTag, 'new scheme command: ' .. tostring(scheme))
if not uiReady then
table.insert(cachedSchemes, {sc = scheme, startArg = isStartingArg} )
return
end
scheme = unescape(scheme) -- "%20" -> " "
local args = split(scheme, '/', 2)
if #args < 2 then
log('E', 'scheme', 'invalid/unsupported starting command: ' .. dumps(args))
return
end
log('D', 'scheme', "invoked by scheme: " .. tostring(scheme) .. ' = ' .. dumps(args))
local version = args[1]
local cmd = args[2]
local data = args[3]
--log('E', 'scheme', ' === === === === === === === === ===')
--dump(args)
if cmd == 'showMod' and version == 'v1' then
-- args = { "v1", "subscriptionMod", "MKA5UZHYS/6902/spanishpoliceroamerpack.zip" }
local filename = split(data, '/')
filename = filename[#filename]
log('I', logTag, 'show mod: ' .. tostring(data))
extensions.core_repository.uiShowMod(data)
return
elseif cmd == 'subscriptionMod' and version == 'v1' then
-- args = { "v1", "subscriptionMod", "MKA5UZHYS/6902/spanishpoliceroamerpack.zip" }
local filename = split(data, '/')
filename = filename[#filename]
log('I', logTag, 'subscription mod: ' .. tostring(data))
extensions.core_repository.uiShowRepo()
extensions.core_repository.modSubscribe(data)
return
elseif cmd == 'downloadMod' and version == 'v1' then
-- args = { "v1", "downloadMod", "MKA5UZHYS/6902/spanishpoliceroamerpack.zip" }
local filename = split(data, '/')
filename = filename[#filename]
log('I', logTag, 'downloading mod: ' .. tostring(data))
extensions.core_repository.installMod(data, filename, 'mods/repo/')
return
elseif cmd == "updateZipMod" and version == "v1" then
-- args = { "v1", "updateZipMod", "crepe.zip", "crepe.zip.tmp" }
local tmp = split(data, '/')
if #tmp < 2 then
log("E","commandhandler","Wrong argument count!")
return
end
log('I', logTag, "updateZipMod '" .. tostring(tmp[1]).. "' with new '"..tostring(tmp[2]) .."'")
extensions.core_modmanager.updateZipMod(tmp[1], tmp[2])
return
elseif cmd == "openMap" and version == "v1" then
-- args = { "v1", "openMap", "levels/gridmap/info.json" }
local jsondata = jsonDecode(data, nil)
-- if core_loadMapCmd then extensions.unload("core_loadMapCmd") end --if we are already going somewhere, remove previous 'queued' commands
extensions.load("core_loadMapCmd")
setExtensionUnloadMode("core_loadMapCmd", "manual")
core_loadMapCmd.set(jsondata, isStartingArg)
return
elseif cmd == "loadSnapshot" and version == "v1" then
extensions.load("core_snapshot")
setExtensionUnloadMode("core_snapshot", "manual")
core_snapshot.onSnapshotSchemeCommand(cmd, data, isStartingArg)
return
elseif cmd == "tech_utils" and version == "v1" then
log("I", "", "Received commandHandler request for "..dumps(cmd)..": "..dumps(data))
local functionName = data
if type(extensions[cmd][functionName]) == "function" then
extensions[cmd][functionName]()
else
log("E", "", "Couldn't run "..cmd.."."..functionName.."(): not a function")
end
return
elseif cmd == "core_input_actions" and version == "v1" then
-- for example using the URL like this: beamng:v1/core_input_actions/triggerDownUp/toggleCamera
log("I", "", "Received commandHandler request for "..dumps(cmd)..": "..dumps(data))
local params = split(data, "/")
local functionName = table.remove(params, 1)
if type(extensions[cmd][functionName]) == "function" then
extensions[cmd][functionName](unpack(params))
else
log("E", "", "Couldn't run "..cmd.."."..functionName.."(): not a function")
end
return
elseif cmd == "startToolchainServer" then
extensions.load('networking_editorToolchain')
return
elseif cmd == "startDebugServer" then
startDebugServer()
return
elseif cmd == "stopDebugServer" then
stopDebugServer()
return
elseif cmd == "attachDebugger" then
if not isDebuggerAttached() then
log('I', 'debugger', 'Debugger attaching ...')
attachDebugger()
else
log('I', 'debugger', 'Debugger already attached.')
end
return
elseif cmd == "detachDebugger" then
if isDebuggerAttached() then
detachDebugger()
log('I', 'debugger', 'Debugger detaching ...')
end
return
end
log('E', 'scheme', 'unsupported scheme command: ' .. dumps(args))
end
Callers
@/lua/ge/extensions/core/schemeCommandServer.lua
if string.startswith(data, 'beamng:') then
commandhandler.onSchemeCommand(data:sub(8))
end
@/lua/ge/extensions/core/commandhandler.lua
for k, v in pairs(cachedSchemes) do
onSchemeCommand(v.sc, v.startArg)
end
if arg1:startswith('beamng:') then
onSchemeCommand(arg1:sub(8), true) -- strip 'beamng:'
break