This commit is contained in:
Zef Hemel
2022-04-26 19:04:36 +02:00
parent cb2d3f8652
commit 76636dd9b1
41 changed files with 500 additions and 287 deletions
+1 -1
View File
@@ -9,8 +9,8 @@ import { System } from "../system";
test("Run a plugos endpoint server", async () => {
let system = new System<EndpointHookT>("server");
let plug = await system.load(
"test",
{
name: "test",
functions: {
testhandler: {
http: {
+21 -2
View File
@@ -1,6 +1,7 @@
import { Hook, Manifest } from "../types";
import { System } from "../system";
import { safeRun } from "../util";
import { EventEmitter } from "events";
// System events:
// - plug:load (plugName: string)
@@ -11,6 +12,14 @@ export type EventHookT = {
export class EventHook implements Hook<EventHookT> {
private system?: System<EventHookT>;
public localListeners: Map<string, ((data: any) => any)[]> = new Map();
addLocalListener(eventName: string, callback: (data: any) => any) {
if (!this.localListeners.has(eventName)) {
this.localListeners.set(eventName, []);
}
this.localListeners.get(eventName)!.push(callback);
}
async dispatchEvent(eventName: string, data?: any): Promise<any[]> {
if (!this.system) {
@@ -32,15 +41,25 @@ export class EventHook implements Hook<EventHookT> {
}
}
}
let localListeners = this.localListeners.get(eventName);
if (localListeners) {
for (let localListener of localListeners) {
let result = await Promise.resolve(localListener(data));
if (result) {
responses.push(result);
}
}
}
return responses;
}
apply(system: System<EventHookT>): void {
this.system = system;
this.system.on({
plugLoaded: (name) => {
plugLoaded: (plug) => {
safeRun(async () => {
await this.dispatchEvent("plug:load", name);
await this.dispatchEvent("plug:load", plug.name);
});
},
});
+2 -2
View File
@@ -11,10 +11,10 @@ export class NodeCronHook implements Hook<CronHookT> {
apply(system: System<CronHookT>): void {
let tasks: ScheduledTask[] = [];
system.on({
plugLoaded: (name, plug) => {
plugLoaded: () => {
reloadCrons();
},
plugUnloaded(name, plug) {
plugUnloaded() {
reloadCrons();
},
});