GE Lua Documentation

Press F to search!

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