7 Commits

Author SHA1 Message Date
UnlegitDqrk
c6b892c51d Updated to latest LuaScript 2026-02-28 19:32:44 +01:00
UnlegitDqrk
d749b9c84c Updated to new Protocol Build 2026-02-28 15:53:31 +01:00
UnlegitDqrk
ba44cd6f7d Updated to new Protocol Build 2026-02-28 15:35:57 +01:00
UnlegitDqrk
35cd895510 Implemented missing Lua features 2026-02-27 23:56:53 +01:00
UnlegitDqrk
d3662a0773 Implemented missing Lua features 2026-02-27 23:56:35 +01:00
UnlegitDqrk
ff2a76e7da Implemented missing Lua features 2026-02-27 23:56:20 +01:00
UnlegitDqrk
4c1cf09f34 Updated to latest Protocol Version 2026-02-27 21:05:07 +01:00
7 changed files with 52 additions and 39 deletions

View File

@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.openautonomousconnection</groupId>
<artifactId>WebClient</artifactId>
<version>1.0.1-BETA.0.1</version>
<version>1.0.1-BETA.0.4</version>
<description>The default WebClient</description>
<url>https://open-autonomous-connection.org/</url>
<issueManagement>

View File

@@ -6,7 +6,7 @@
<groupId>org.openautonomousconnection</groupId>
<artifactId>WebClient</artifactId>
<version>1.0.1-BETA.0.2</version>
<version>1.0.1-BETA.0.4</version>
<organization>
<name>Open Autonomous Connection</name>
<url>https://open-autonomous-connection.org/</url>
@@ -74,12 +74,12 @@
<dependency>
<groupId>org.openautonomousconnection</groupId>
<artifactId>LuaScript</artifactId>
<version>1.0.0-BETA.1.3</version>
<version>0.0.0-STABLE.1.4</version>
</dependency>
<dependency>
<groupId>org.openautonomousconnection</groupId>
<artifactId>Protocol</artifactId>
<version>1.0.1-BETA.0.5</version>
<version>1.0.1-BETA.0.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>

View File

@@ -10,6 +10,7 @@ import org.openautonomousconnection.protocol.packets.v1_0_1.beta.web.impl.resour
import org.openautonomousconnection.protocol.side.client.ProtocolClient;
import org.openautonomousconnection.protocol.side.client.ProtocolWebClient;
import org.openautonomousconnection.protocol.side.client.events.ConnectedToProtocolINSServerEvent;
import org.openautonomousconnection.protocol.side.client.events.ConnectedToProtocolServerEvent;
import org.openautonomousconnection.protocol.urlhandler.v1_0_1.beta.LibClientImpl_v1_0_1_B;
import org.openautonomousconnection.protocol.urlhandler.v1_0_1.beta.web.WebFlagInspector;
import org.openautonomousconnection.protocol.urlhandler.v1_0_1.beta.web.WebRequestContextProvider;
@@ -205,7 +206,6 @@ public final class ClientImpl extends ProtocolWebClient {
@Override
public void streamChunk(WebPacketHeader header, int seq, byte[] data) {
StreamState state = streams.get(new StreamKey(header));
if (state == null) {
throw new IllegalStateException("Chunk without streamStart");
@@ -216,7 +216,6 @@ public final class ClientImpl extends ProtocolWebClient {
@Override
public void streamEnd(WebPacketHeader header, boolean ok, String error) {
StreamState state = streams.get(new StreamKey(header));
if (state != null) {
state.markEnd(ok, error);
@@ -224,8 +223,7 @@ public final class ClientImpl extends ProtocolWebClient {
}
@Override
public void streamFinish(WebPacketHeader header, byte[] ignored) {
public void streamFinish(WebPacketHeader header, byte[] data) {
StreamKey key = new StreamKey(header);
StreamState state = streams.remove(key);
if (state == null) return;

View File

@@ -5,8 +5,11 @@ import javafx.scene.web.WebView;
import org.openautonomousconnection.luascript.fx.FxDomHost;
import org.openautonomousconnection.luascript.fx.FxThreadBridge;
import org.openautonomousconnection.luascript.hosts.UiHost;
import org.openautonomousconnection.oacswing.component.OACOptionPane;
import org.openautonomousconnection.webclient.Main;
import org.w3c.dom.Element;
import javax.swing.*;
import java.util.Objects;
/**
@@ -66,23 +69,17 @@ public final class UiHostImpl implements UiHost {
@Override
public void alert(String message) {
// No JS: use simple JavaFX dialog-less fallback (log-style). You can replace with real Dialogs later.
// Keeping it deterministic and non-blocking for now.
System.out.println("[ui.alert] " + (message == null ? "" : message));
OACOptionPane.showMessageDialog(Main.getUi(), message, "Alert", JOptionPane.INFORMATION_MESSAGE);
}
@Override
public boolean confirm(String message) {
// No JS: deterministic default (false). Replace with JavaFX dialogs if you want UI interaction.
System.out.println("[ui.confirm] " + (message == null ? "" : message));
return false;
return OACOptionPane.showConfirmDialog(Main.getUi(), message, "Alert", OACOptionPane.YES_NO_OPTION) == OACOptionPane.YES_OPTION;
}
@Override
public String prompt(String message, String defaultValue) {
// No JS: deterministic default.
System.out.println("[ui.prompt] " + (message == null ? "" : message));
return defaultValue;
return (String) OACOptionPane.showInputDialog(Main.getUi(), message, "Prompt", JOptionPane.QUESTION_MESSAGE, null, null, defaultValue);
}
@Override

View File

@@ -2,7 +2,6 @@ package org.openautonomousconnection.webclient.settings;
import org.openautonomousconnection.luascript.security.LuaExecutionPolicy;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -187,6 +186,6 @@ public final class AppSettings {
* Resets the Lua policy back to ui default.
*/
public void resetLuaPolicyToUiDefault() {
this.luaPolicy = new LuaExecutionPolicy(Duration.ofMillis(50L), 200_000L, 5_000);
this.luaPolicy = LuaExecutionPolicy.uiDefault();
}
}

View File

@@ -4,13 +4,14 @@ import javafx.concurrent.Worker;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import org.luaj.vm2.Globals;
import org.openautonomousconnection.luascript.fx.FxDomHost;
import org.openautonomousconnection.luascript.fx.FxEventHost;
import org.openautonomousconnection.luascript.fx.FxWebViewResourceHost;
import org.luaj.vm2.LuaError;
import org.openautonomousconnection.luascript.fx.*;
import org.openautonomousconnection.luascript.hosts.HostServices;
import org.openautonomousconnection.luascript.runtime.LuaRuntime;
import org.openautonomousconnection.luascript.security.LuaExecutionPolicy;
import org.openautonomousconnection.luascript.utils.LuaGlobalsFactory;
import org.openautonomousconnection.oacswing.component.OACOptionPane;
import org.openautonomousconnection.webclient.Main;
import org.openautonomousconnection.webclient.lua.WebLogger;
import org.openautonomousconnection.webclient.lua.hosts.ConsoleHostImpl;
import org.openautonomousconnection.webclient.lua.hosts.UiHostImpl;
@@ -92,20 +93,37 @@ public final class FxEngine implements AutoCloseable {
.sandbox(true)
);
ConsoleHostImpl console = new ConsoleHostImpl(logger);
UiHostImpl uiHost = new UiHostImpl(engine, webView, dom);
FxWebViewResourceHost resourceHost = new FxWebViewResourceHost(engine);
FxEventHost eventHost = new FxEventHost(dom);
HostServices services = new HostServices.Default(
new FxUiHost(engine, dom),
dom,
eventHost,
new FxWebViewResourceHost(engine),
new ConsoleHostImpl(logger),
new FxAudioHost(),
new FxImageHost(engine, dom),
new FxVideoHost(engine, dom),
new FxSchedulerHost(),
new FxSelectorHost(engine, dom),
new FxGeometryHost(engine, dom),
new FxCssHost(engine, dom),
new FxStorageHost(engine, dom),
new FxUtilHost(engine, dom),
new FxClipboardHost(),
new FxObserverHost(engine, dom)
);
LuaRuntime rt = new LuaRuntime(globals, new HostServices.Default(uiHost, dom, null, resourceHost, console), policy);
FxEventHost eventHost = new FxEventHost(dom, rt.eventRouter());
HostServices services = new HostServices.Default(uiHost, dom, eventHost, resourceHost, console);
rt.close();
rt = new LuaRuntime(globals, services, policy);
LuaRuntime rt = new LuaRuntime(globals, services, policy);
eventHost.setRouter(rt.eventRouter());
rt.installStdTables(true);
try {
rt.bootstrapFromDom();
} catch (LuaError error) {
Main.getLogger().exception("Failed to start script", error);
OACOptionPane.showMessageDialog(Main.getUi(), error.getMessage(), "Script", OACOptionPane.ERROR_MESSAGE);
}
this.runtime = rt;
}

View File

@@ -87,9 +87,10 @@ public final class SettingsManager {
}
// Lua policy
long timeoutMs = parseLong(p.getProperty("lua.timeoutMs"), 50L);
long instr = parseLong(p.getProperty("lua.instructionLimit"), 200_000L);
int hook = parseInt(p.getProperty("lua.hookStep"), 5_000);
LuaExecutionPolicy defaultPolicy = LuaExecutionPolicy.uiDefault();
long timeoutMs = parseLong(p.getProperty("lua.timeoutMs"), defaultPolicy.timeout().toMillis());
long instr = parseLong(p.getProperty("lua.instructionLimit"), defaultPolicy.instructionLimit());
int hook = parseInt(p.getProperty("lua.hookStep"), defaultPolicy.hookStep());
try {
s.setLuaPolicy(new LuaExecutionPolicy(Duration.ofMillis(timeoutMs), instr, hook));
} catch (Exception ignored) {