@colyseus/core
Version:
Multiplayer Framework for Node.js.
52 lines (51 loc) • 1.76 kB
JavaScript
// packages/core/src/router/default_routes.ts
import { createEndpoint, createRouter } from "@colyseus/better-call";
import * as matchMaker from "../MatchMaker.mjs";
import { getBearerToken } from "../utils/Utils.mjs";
import { getTransport } from "../Transport.mjs";
var postMatchmakeMethod = createEndpoint("/matchmake/:method/:roomName", { method: "POST" }, async (ctx) => {
if (matchMaker.state === matchMaker.MatchMakerState.SHUTTING_DOWN) {
throw ctx.error(503);
}
const requestHeaders = ctx.request.headers;
const method = ctx.params.method;
const roomName = ctx.params.roomName;
try {
const clientOptions = ctx.body;
const response = await matchMaker.controller.invokeMethod(
method,
roomName,
clientOptions,
{
token: getBearerToken(ctx.request.headers.get("authorization")),
headers: ctx.request.headers,
ip: requestHeaders.get("x-forwarded-for") ?? requestHeaders.get("x-client-ip") ?? requestHeaders.get("x-real-ip"),
req: ctx.request
}
);
const transport = getTransport();
if (transport.protocol !== void 0) {
response.protocol = transport.protocol;
}
const json = JSON.stringify(response);
return new Response(json, {
headers: {
"content-type": "application/json",
//
// Set content length manually to avoid "chunked" transfer-encoding header
// See https://github.com/haxetink/tink_http/issues/27
//
"content-length": json.length.toString()
}
});
} catch (e) {
throw ctx.error(e.code, { code: e.code, error: e.message });
}
});
function getDefaultRouter() {
return createRouter({ postMatchmakeMethod });
}
export {
getDefaultRouter,
postMatchmakeMethod
};