From d8b6501b57f07546ed0f19465779f8bce7e09fc5 Mon Sep 17 00:00:00 2001 From: XeonSquared Date: Thu, 24 Oct 2019 01:42:56 +1100 Subject: [PATCH] added a wake-on-LAN beacon daemon --- WoLBeacon/OpenOS/etc/rc.d/wolbeacon.lua | 64 +++++++++++++++++++++++++ programs.cfg | 9 ++++ 2 files changed, 73 insertions(+) create mode 100644 WoLBeacon/OpenOS/etc/rc.d/wolbeacon.lua diff --git a/WoLBeacon/OpenOS/etc/rc.d/wolbeacon.lua b/WoLBeacon/OpenOS/etc/rc.d/wolbeacon.lua new file mode 100644 index 0000000..f7a636b --- /dev/null +++ b/WoLBeacon/OpenOS/etc/rc.d/wolbeacon.lua @@ -0,0 +1,64 @@ +local serial = require "serialization" +local component = require "component" +local event = require "event" + +local timer = -1 + +local cfg = {} +cfg.broadcast = true +cfg.receive = true +cfg.delay = 60 +cfg.port = 3442 +cfg.message = "WoLBeacon" + +local function saveConfig() + local f = io.open("/etc/wolbeacon.lua","wb") + if not f then + return false + end + f:write(serial.serialize(cfg)) + f:close() +end + +local function broadcast() + for modem in component.list("modem") do + component.invoke(modem,"broadcast",cfg.port,cfg.message) + end +end + +local function loadConfig() + local f = io.open("/etc/wolbeacon.lua","rb") + if not f then + saveConfig() + return false + end + cfg = serial.unserialize(f:read("*a")) or cfg + f:close() +end + +function start() + loadConfig() + if cfg.receive then + for modem in component.list("modem") do + component.invoke(modem,"setWakeMessage",cfg.message) + end + else + for modem in component.list("modem") do + component.invoke(modem,"setWakeMessage",nil) + end + end + if cfg.broadcast then + timer = event.timer(cfg.delay, broadcast, math.huge) + end +end + +function stop() + event.cancel(timer) + timer = -1 +end + +function reload() + stop() + start() +end + diff --git a/programs.cfg b/programs.cfg index f79aba6..504fe8e 100644 --- a/programs.cfg +++ b/programs.cfg @@ -128,4 +128,13 @@ authors = "Izaya", repo = "tree/master/" }, + ["wolbeacon"] = { + files = { + ["master/WoLBeacon/OpenOS/etc/rc.d/wolbeacon.lua"] = "//etc/rc.d", + }, + name = "WoL Beacon", + description = "Wake on LAN daemon", + authors = "Izaya", + repo = "tree/master/" + }, }