Files
plainleaf/web/syscalls/event.ts
T
2025-06-16 18:53:21 +02:00

33 lines
959 B
TypeScript

// deno-lint-ignore-file ban-types
import type { SysCallMapping } from "../../lib/plugos/system.ts";
import { LuaStackFrame, luaValueToJS } from "../../lib/space_lua/runtime.ts";
import type { Client } from "../client.ts";
import type { EventSubscription } from "../../lib/event.ts";
export function eventListenerSyscalls(
client: Client,
): SysCallMapping {
return {
/**
* Define a Lua event listener
*/
"event.listen": (
_ctx,
def: EventSubscription,
) => {
console.log("Registering Lua event listener: ", def.name);
const listeners = client.config.get<Function[]>([
"eventListeners",
def.name,
], []);
listeners.push((...args: any[]) => {
// Convert return value to JS
return def.run(...args).then((val) =>
luaValueToJS(val, LuaStackFrame.lostFrame)
);
});
client.config.set(["eventListeners", def.name], listeners);
},
};
}