Built-in room » Relay Room¶
The built-in RelayRoom
is useful for simple use cases, where you don't need to hold any state in the server-side other than the clients connected to it.
By simply relaying messages (forwarding them from a client to everyone else) - the server-side is not able to validate any of them - the client-side is the one who should perform validations.
Tip
The source-code of the RelayRoom
is very simple. The general recommentation is to implement your own version of it with server-side validations when you see fit.
Server-side¶
import { RelayRoom } from "colyseus";
//
// Expose your relayed room.
//
gameServer.define("your_relayed_room", RelayRoom, {
maxClients: 4,
allowReconnectionTime: 120
});
Client-side¶
See how to register callbacks for players joining, leaving, sending and receiving messages from the relayed room.
Connecting into the room¶
import { Client } from "colyseus.js";
const client = new Client("ws://localhost:2567");
//
// Join the relayed room.
//
const relay = await client.joinOrCreate("your_relayed_room", {
name: "This is my name!"
});
Registering callbacks when players join and leave¶
//
// Detect when a player joined the room.
//
relay.state.players.onAdd((player, sessionId) => {
if (relay.sessionId === sessionId) {
console.log("It's me!", player.name);
} else {
console.log("It's an opponent", player.name, sessionId);
}
})
//
// Detect when a player left the room.
//
relay.state.players.onRemove((player, sessionId) => {
console.log("Opponent left!", player, sessionId);
})
//
// Detect when the connectivity of a player has changed.
// (only available if you provided `allowReconnection: true` in the server-side)
//
relay.state.players.onChange((player, sessionId) => {
if (player.connected) {
console.log("Opponent has reconnected!", player, sessionId);
} else {
console.log("Opponent has disconnected!", player, sessionId);
}
})
Sending and receiving messages¶
//
// By sending a message, all other clients will receive it under the same name.
// Messages are only sent to other connected clients, never the current one.
//
relay.send("fire", {
x: 100,
y: 200
});
//
// Register a callback for messages you're interested in from other clients.
//
relay.onMessage("fire", ([sessionId, message]) => {
//
// The `sessionId` from who sent the message
//
console.log(sessionId, "sent a message!");
//
// The actual message sent by the other client
//
console.log("fire at", message);
});