Skip to content

Commit

Permalink
Support web-base restart
Browse files Browse the repository at this point in the history
  • Loading branch information
javalikescript committed Jan 5, 2025
1 parent d141154 commit ee77ccd
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 38 deletions.
39 changes: 24 additions & 15 deletions extensions/web-base/addons.lua
Original file line number Diff line number Diff line change
@@ -1,27 +1,36 @@

local function onStartup(extension, script)
extension:getEngine():onExtension('web-base', function(webBaseExtension)
webBaseExtension:registerAddonExtension(extension, script or true)
end)
end

local function onShutdown(extension)
extension:getEngine():onExtension('web-base', function(webBaseExtension)
webBaseExtension:unregisterAddonExtension(extension)
end)
local function onWebBase(extension, script)
local webBaseExt = extension:getEngine():getExtensionById('web-base')
if webBaseExt then
if script then
webBaseExt:registerAddonExtension(extension, script)
else
webBaseExt:unregisterAddonExtension(extension)
end
end
end

local function registerAddonExtension(extension, script)
local started = false
if script == nil then
script = extension:getId()..'.js'
end
extension:subscribeEvent('startup', function()
onStartup(extension, script)
started = true
onWebBase(extension, script)
end)
extension:subscribeEvent('web-base:startup', function()
if started then
onWebBase(extension, script)
end
end)
extension:subscribeEvent('shutdown', function()
onShutdown(extension)
started = false
onWebBase(extension)
end)
end

return {
onStartup = onStartup,
onShutdown = onShutdown,
registerAddonExtension = registerAddonExtension
registerAddonExtension = registerAddonExtension,
register = registerAddonExtension
}
19 changes: 6 additions & 13 deletions extensions/web-base/web-base.lua
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,11 @@ local RollingList = class.create(List, function(rollingList)
end)

local websockets = {}
local addons = {}

local function cleanup()
websockets = {}
addons = {}
Logger.setLogRecorder(recordLog)
end

Expand Down Expand Up @@ -114,32 +116,21 @@ local function onDataChange(value, previousValue, path)
end
end

local addons = {}

function extension:registerAddon(id, addon)
addons[id] = addon
logger:info('Web base add-on "%s" registered', id)
webSocketBroadcast({event = 'addon-change'})
end

function extension:unregisterAddon(name)
addons[name] = nil
logger:info('Web base add-on "%s" unregistered', name)
logger:info('Web base add-on "%s" %s', id, addon and 'registered' or 'unregistered')
webSocketBroadcast({event = 'addon-change'})
end

function extension:registerAddonExtension(ext, script)
if script == true then
script = ext:getId()..'.js'
end
self:registerAddon(ext:getId(), {
handler = AddonFileHttpHandler:new(ext:getDir()),
script = script or 'init.js'
})
end

function extension:unregisterAddonExtension(ext)
self:unregisterAddon(ext:getId())
self:registerAddon(ext:getId())
end

extension:watchPattern('^data/.*', onDataChange)
Expand Down Expand Up @@ -240,6 +231,8 @@ extension:subscribeEvent('startup', function()
HttpExchange.ok(exchange, json.stringify(l), 'application/json')
end))
logger:info('WebSocket available on /ws/')

extension:getEngine():publishEvent('web-base:startup', extension)
end)

extension:subscribeEvent('shutdown', function()
Expand Down
10 changes: 0 additions & 10 deletions lha/Engine.lua
Original file line number Diff line number Diff line change
Expand Up @@ -245,16 +245,6 @@ return class.create(function(engine)
List.removeFirst(self.extensions, extension)
end

function engine:onExtension(id, fn)
-- TODO replay on extension reload
local extension = self:getExtensionById(id)
if extension then
fn(extension)
return true
end
return false
end

function engine:getExtensionById(id)
for _, extension in ipairs(self.extensions) do
if extension:getId() == id then
Expand Down

0 comments on commit ee77ccd

Please sign in to comment.