build config changes
All checks were successful
Galvanic Corrosion Cross-Compile / build (push) Successful in 1m50s
All checks were successful
Galvanic Corrosion Cross-Compile / build (push) Successful in 1m50s
* Commit hash shipped with builds
* Post & pre-build events
* Objective fixes
* Orientation challenge filler
* Custom Rooms base
- Currently cannot save rooms (CDN not set up)
* Moved root path to path.ts
* Room cloning
* Rewrote instances - the whole thing
* Relationships are still untested
* Charades Words
* AG Room fetch
* Private room matchmaking
* Socket fixes
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/* Galvanic Corrosion - Rec Room custom server for communities.
|
||||
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
|
||||
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
|
||||
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
|
||||
@@ -16,11 +16,12 @@ 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 Logging from "@proxnet/undead-logging";
|
||||
import { APIUtils } from "../../apiutils.ts";
|
||||
import { APIUtils, NoBody } from "../../apiutils.ts";
|
||||
import Matchmaking from "../../data/live/base.ts";
|
||||
import { MatchmakingErrorCode } from "../../data/live/types.ts";
|
||||
import { AuthType } from "../../data/users.ts";
|
||||
import express from "express";
|
||||
import { z } from "zod";
|
||||
|
||||
const log = new Logging("MatchGotoRoute");
|
||||
|
||||
@@ -31,13 +32,31 @@ interface MatchmakingParams {
|
||||
subRoomName?: string
|
||||
}
|
||||
|
||||
const ProperCaseBooleanSchema = z.preprocess((val) => {
|
||||
if (val === "True") return true;
|
||||
if (val === "False") return false;
|
||||
if (typeof val === "boolean") return val; // allow raw booleans too
|
||||
return val; // will fail validation
|
||||
}, z.boolean());
|
||||
|
||||
interface MatchmakingOptions {
|
||||
CreatePrivateInstance?: string,
|
||||
BypassMovementModeRestriction?: string
|
||||
}
|
||||
|
||||
route.router.post('/room/:roomName',
|
||||
|
||||
APIUtils.Authentication,
|
||||
APIUtils.AuthenticationType(AuthType.Game),
|
||||
APIUtils.startTimer,
|
||||
express.urlencoded({ extended: true }),
|
||||
APIUtils.validateRequestBody(z.object({
|
||||
CreatePrivateInstance: ProperCaseBooleanSchema.optional(),
|
||||
BypassMovementModeRestriction: ProperCaseBooleanSchema.optional()
|
||||
})),
|
||||
|
||||
async (rq: express.Request<MatchmakingParams>, rs: express.Response, nxt: express.NextFunction) => {
|
||||
async (rq: express.Request<MatchmakingParams, NoBody, MatchmakingOptions>, rs: express.Response, nxt: express.NextFunction) => {
|
||||
log.d(`Player ${rs.locals.profile.getId()} is requesting to matchmake\n Room: '${rq.params.roomName}'\n Body: ${JSON.stringify(rq.body)}`);
|
||||
if (!rq.params.roomName) {
|
||||
log.d('Matchmake failed: No room specified');
|
||||
rs.json({
|
||||
@@ -45,7 +64,11 @@ route.router.post('/room/:roomName',
|
||||
});
|
||||
return;
|
||||
}
|
||||
rs.json(await Matchmaking.matchmake({ profile: rs.locals.profile, roomName: rq.params.roomName }));
|
||||
rs.json(await Matchmaking.matchmake({
|
||||
profile: rs.locals.profile,
|
||||
roomName: rq.params.roomName,
|
||||
private: rq.body.CreatePrivateInstance ? rq.body.CreatePrivateInstance == 'True' : undefined
|
||||
}));
|
||||
nxt();
|
||||
},
|
||||
|
||||
@@ -57,8 +80,10 @@ route.router.post('/room/:roomName/:subRoomName',
|
||||
APIUtils.Authentication,
|
||||
APIUtils.AuthenticationType(AuthType.Game),
|
||||
APIUtils.startTimer,
|
||||
express.urlencoded({ extended: true }),
|
||||
|
||||
async (rq: express.Request<MatchmakingParams>, rs: express.Response, nxt: express.NextFunction) => {
|
||||
async (rq: express.Request<MatchmakingParams, NoBody, MatchmakingOptions>, rs: express.Response, nxt: express.NextFunction) => {
|
||||
log.d(`Player ${rs.locals.profile.getId()} is requesting to matchmake\n Room: '${rq.params.roomName}'\n Subroom: '${rq.params.subRoomName}'\n Body: ${JSON.stringify(rq.body)}`);
|
||||
if (!rq.params.roomName) {
|
||||
log.d('Matchmake failed: No room specified');
|
||||
rs.json({
|
||||
@@ -66,7 +91,12 @@ route.router.post('/room/:roomName/:subRoomName',
|
||||
});
|
||||
return;
|
||||
}
|
||||
rs.json(await Matchmaking.matchmake({ profile: rs.locals.profile, roomName: rq.params.roomName, subRoomName: rq.params.subRoomName }));
|
||||
rs.json(await Matchmaking.matchmake({
|
||||
profile: rs.locals.profile,
|
||||
roomName: rq.params.roomName,
|
||||
subRoomName: rq.params.subRoomName,
|
||||
private: rq.body.CreatePrivateInstance ? rq.body.CreatePrivateInstance == 'True' : undefined
|
||||
}));
|
||||
nxt();
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user