This commit is contained in:
2025-07-27 19:49:35 -04:00
parent 2302290d34
commit 941c8400c0
23 changed files with 293 additions and 50 deletions

View File

@@ -16,6 +16,7 @@ import {
import { SocketTarget } from "./targets/targetbase.ts";
import type Profile from "../../profiles/profile.ts";
import { detailedLog } from "../../../main.ts";
import { PlayerSocketSubscriptionTarget } from "./targets/SubscribeToPlayers.ts";
const logmessages = true;
@@ -39,7 +40,7 @@ export class SignalRSocketHandler {
player.setSocketHandler(this);
//this.#Targets.set('SubscribeToPlayers', new PlayerSocketSubscriptionTarget(this));
this.#Targets.set('SubscribeToPlayers', new PlayerSocketSubscriptionTarget(this));
for (const target of this.#Targets.values()) target.onInit();
@@ -55,7 +56,9 @@ export class SignalRSocketHandler {
if (!targetExec) return { type: TargetResultType.NotATarget } as TargetResultNotATarget;
else {
try {
return { type: TargetResultType.Success, data: await targetExec.exec(args) } as TargetResultSuccess<T>;
const parsed = targetExec.zod.safeParse(args);
if (parsed.success) return { type: TargetResultType.Success, data: await targetExec.exec(args) } as TargetResultSuccess<T>;
else return { type: TargetResultType.Failure, err: "Argument parse failure" } as TargetResultFailure;
} catch (err) {
this.#log.w(`Target '${target}' function error: ${err}`);
if (err instanceof Error) return { type: TargetResultType.Failure, err: err } as TargetResultFailure;

View File

@@ -0,0 +1,18 @@
import z from "zod";
import { SocketTarget } from "./targetbase.ts";
export class PlayerSocketSubscriptionTarget extends SocketTarget {
#ids: number[] = [];
override zod = z.tuple([]).rest(z.number());
override exec(...ids: number[]) {
this.#ids = ids;
}
getIds() {
return this.#ids;
}
}

View File

@@ -1,26 +1,12 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
import z from "zod";
import type { SignalRSocketHandler } from "../socket.ts";
export class SocketTarget {
socket: SignalRSocketHandler;
zod: z.ZodTuple = z.tuple([]);
constructor(socket: SignalRSocketHandler) {
this.socket = socket;
}
@@ -33,8 +19,7 @@ export class SocketTarget {
return;
}
// deno-lint-ignore require-await
async exec(_args: unknown) {
exec(_args: unknown): Promise<unknown> | unknown {
throw new Error("Execution for this target is not set.");
}