From c1fb1353e07158d25d7b177885e40c05d6924ea5 Mon Sep 17 00:00:00 2001 From: UnlegitDqrk Date: Sat, 28 Feb 2026 16:00:29 +0100 Subject: [PATCH] Example implementation --- .../luascript/hosts/AudioHost.java | 9 ++++++ .../luascript/hosts/HostServices.java | 11 ++++++- .../luascript/runtime/FxLuaScriptEngine.java | 4 ++- .../luascript/tables/AudioTable.java | 29 +++++++++++++++++++ 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/openautonomousconnection/luascript/hosts/AudioHost.java create mode 100644 src/main/java/org/openautonomousconnection/luascript/tables/AudioTable.java diff --git a/src/main/java/org/openautonomousconnection/luascript/hosts/AudioHost.java b/src/main/java/org/openautonomousconnection/luascript/hosts/AudioHost.java new file mode 100644 index 0000000..d40f52a --- /dev/null +++ b/src/main/java/org/openautonomousconnection/luascript/hosts/AudioHost.java @@ -0,0 +1,9 @@ +package org.openautonomousconnection.luascript.hosts; + +import java.io.File; + +public interface AudioHost { + + void play(File audioFile); + +} diff --git a/src/main/java/org/openautonomousconnection/luascript/hosts/HostServices.java b/src/main/java/org/openautonomousconnection/luascript/hosts/HostServices.java index c34137f..5e595c7 100644 --- a/src/main/java/org/openautonomousconnection/luascript/hosts/HostServices.java +++ b/src/main/java/org/openautonomousconnection/luascript/hosts/HostServices.java @@ -45,6 +45,8 @@ public interface HostServices { */ Optional console(); + Optional audio(); + /** * Simple immutable implementation. */ @@ -54,6 +56,7 @@ public interface HostServices { private final EventHost events; private final ResourceHost resources; private final ConsoleHost console; + private final AudioHost audioHost; /** * Creates a HostServices container. @@ -64,12 +67,13 @@ public interface HostServices { * @param resources resource host * @param console console host */ - public Default(UiHost ui, DomHost dom, EventHost events, ResourceHost resources, ConsoleHost console) { + public Default(UiHost ui, DomHost dom, EventHost events, ResourceHost resources, ConsoleHost console, AudioHost audioHost) { this.ui = ui; this.dom = dom; this.events = events; this.resources = resources; this.console = console; + this.audioHost = audioHost; } @Override @@ -96,6 +100,11 @@ public interface HostServices { public Optional console() { return Optional.ofNullable(console); } + + @Override + public Optional audio() { + return Optional.ofNullable(audioHost); + } } /** diff --git a/src/main/java/org/openautonomousconnection/luascript/runtime/FxLuaScriptEngine.java b/src/main/java/org/openautonomousconnection/luascript/runtime/FxLuaScriptEngine.java index 0d314ca..b5439e8 100644 --- a/src/main/java/org/openautonomousconnection/luascript/runtime/FxLuaScriptEngine.java +++ b/src/main/java/org/openautonomousconnection/luascript/runtime/FxLuaScriptEngine.java @@ -7,6 +7,7 @@ import org.openautonomousconnection.luascript.fx.FxDomHost; import org.openautonomousconnection.luascript.fx.FxEventHost; import org.openautonomousconnection.luascript.fx.FxUiHost; import org.openautonomousconnection.luascript.fx.FxWebViewResourceHost; +import org.openautonomousconnection.luascript.hosts.AudioHost; import org.openautonomousconnection.luascript.hosts.HostServices; import org.openautonomousconnection.luascript.security.LuaExecutionPolicy; import org.openautonomousconnection.luascript.utils.LuaGlobalsFactory; @@ -86,7 +87,8 @@ public final class FxLuaScriptEngine implements AutoCloseable { FxUiHost uiHost = new FxUiHost(engine, dom); FxWebViewResourceHost resourceHost = new FxWebViewResourceHost(engine); FxEventHost eventHost = new FxEventHost(dom); - HostServices services = new HostServices.Default(uiHost, dom, eventHost, resourceHost, console); + // TODO: Default implementation or parameter for "audioHost" + HostServices services = new HostServices.Default(uiHost, dom, eventHost, resourceHost, console, audioHost); LuaRuntime rt = new LuaRuntime(globals, services, policy); eventHost.setRouter(rt.eventRouter()); diff --git a/src/main/java/org/openautonomousconnection/luascript/tables/AudioTable.java b/src/main/java/org/openautonomousconnection/luascript/tables/AudioTable.java new file mode 100644 index 0000000..3a73d8c --- /dev/null +++ b/src/main/java/org/openautonomousconnection/luascript/tables/AudioTable.java @@ -0,0 +1,29 @@ +package org.openautonomousconnection.luascript.tables; + +import org.luaj.vm2.LuaValue; +import org.luaj.vm2.lib.OneArgFunction; +import org.openautonomousconnection.luascript.hosts.AudioHost; +import org.openautonomousconnection.luascript.hosts.HostServices; +import org.openautonomousconnection.luascript.utils.ScriptTable; + +import java.io.File; + +public class AudioTable extends ScriptTable { + protected AudioTable() { + super("audio"); + } + + @Override + protected void define(HostServices services) { + AudioHost audioHost = services.audio().orElseThrow(() -> new IllegalStateException("DomHost not provided")); + + table().set("play", new OneArgFunction() { + @Override + public LuaValue call(LuaValue arg) { + String fileName = arg.checkjstring(); + audioHost.play(new File(fileName)); + return LuaValue.NIL; + } + }); + } +}