@colyseus/core
Version:
Multiplayer Framework for Node.js.
67 lines (57 loc) • 2.03 kB
text/typescript
/**
* Matchmaking controller
* (for interoperability between different http frameworks, e.g. express, uWebSockets.js, etc)
*/
import { ErrorCode } from '@colyseus/shared-types';
import { ServerError } from '../errors/ServerError.ts';
import { debugError } from '../Debug.ts';
import * as matchMaker from '../MatchMaker.ts';
import type { AuthContext } from '../Transport.ts';
export const controller = {
DEFAULT_CORS_HEADERS: {
'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, Authorization',
'Access-Control-Allow-Methods': 'GET,HEAD,PUT,PATCH,POST,DELETE',
'Access-Control-Allow-Credentials': 'true',
'Access-Control-Allow-Origin': '*',
'Access-Control-Max-Age': '2592000',
// ...
},
exposedMethods: ['joinOrCreate', 'create', 'join', 'joinById', 'reconnect'],
allowedRoomNameChars: /([a-zA-Z_\-0-9]+)/gi,
matchmakeRoute: 'matchmake',
/**
* You can manually change the default corsHeaders by overwriting the `getCorsHeaders()` method:
* ```
* import { matchMaker } from "@colyseus/core";
* matchMaker.controller.getCorsHeaders = function(headers) {
* if (headers.get('referer') !== "xxx") {
* }
*
* return {
* 'Access-Control-Allow-Origin': 'safedomain.com',
* }
* }
* ```
*/
getCorsHeaders(headers: Headers): { [header: string]: string } {
return {
['Access-Control-Allow-Origin']: headers.get("origin") || "*",
};
},
async invokeMethod(
method: string,
roomName: string,
clientOptions: matchMaker.ClientOptions = {},
authOptions?: AuthContext,
) {
if (this.exposedMethods.indexOf(method) === -1) {
throw new ServerError(ErrorCode.MATCHMAKE_NO_HANDLER, `invalid method "${method}"`);
}
try {
return await matchMaker[method](roomName, clientOptions, authOptions);
} catch (e: any) {
debugError(e);
throw new ServerError(e.code || ErrorCode.MATCHMAKE_UNHANDLED, e.message);
}
}
}