This package contains a set of utility hooks to use Colyseus with React.
Colyseus is a framework for writing your own authoritative multiplayer game servers using JavaScript/TypeScript and Node.js, and easily integrating it with your favorite game engine.
This package still needs to be battle-tested for production, but it gives a good glimpse of how Colyseus and React work together and how to handle external states on React.
-
Install the package
pnpm add use-colyseus
-
Create a
colyseus.ts
file on your React appimport { colyseus } from "use-colyseus"; import { GameState } from "shared/schema"; // Your room schema export const { client, connectToColyseus, disconnectFromColyseus, useColyseusRoom, useColyseusState, } = colyseus<GameState>('ws://localhost:2567');
-
Import the hooks from your newly created
colyseus.ts
file and start building :)
-
Setup the Colyseus client and type the utility hooks.
- endpoint:
string
- schema?:
Schema
Client
connectToColyseus
disconnectFromColyseus
useColyseusRoom
useColyseusState
export const { client, connectToColyseus, disconnectFromColyseus, useColyseusRoom, useColyseusState, } = colyseus<GameState>('ws://localhost:2567');
- endpoint:
-
Connect the client to the specified Colyseus server room. Prevents duplicated connections.
- roomName:
string
- options?:
unknown
Promise<void>
useEffect(() => { (async () => { await connectToColyseus("test"); })(); return () => { disconnectFromColyseus(); }; }, []);
- roomName:
-
Disconnect the client from the current connected Colyseus server
Promise<void>
useEffect(() => { (async () => { await connectToColyseus("test"); })(); return () => { disconnectFromColyseus(); }; }, []);
-
Access the Colyseus room object. Shouldn't be used to access the state,
room.state
is not updated. UseuseColyseusState
instead.Room
const room = useColyseusRoom(); if (!room) return null; console.log(room.sessionId);
Access the Colyseus room state. Returns the complete state object updated in real-time. Use a selector to prevent re-renderings.
- selector?:
(state: S) => unknown
Room
const clients = useColyseusState((state) => state.clients); // Only re-render if `state.clients` has changed // or const state = useColyseusState(); // Causes a lot of re-renderings
- Endel Dreyer: Creating such a powerful and easy to use network framework.
- Douglas Delavy: Partnership during the development of this package.