@p3ntest/use-colyseus v0.0.9
useColyseus Hooks 🎣 🏟️
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.
Usage
Install the package
pnpm add use-colyseusCreate a
colyseus.tsfile 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.tsfile and start building :)
Documentation
colyseusSetup the Colyseus client and type the utility hooks.
Parameters:
- endpoint:
string - schema?:
Schema
Return:
ClientconnectToColyseusdisconnectFromColyseususeColyseusRoomuseColyseusState
Example:
export const { client, connectToColyseus, disconnectFromColyseus, useColyseusRoom, useColyseusState, } = colyseus<GameState>('ws://localhost:2567');- endpoint:
connectToColyseusConnect the client to the specified Colyseus server room. Prevents duplicated connections.
Parameters:
- roomName:
string - options?:
unknown
Return:
Promise<void>Example:
useEffect(() => { (async () => { await connectToColyseus("test"); })(); return () => { disconnectFromColyseus(); }; }, []);- roomName:
disconnectFromColyseusDisconnect the client from the current connected Colyseus server
Parameters:
Return:
Promise<void>Example:
useEffect(() => { (async () => { await connectToColyseus("test"); })(); return () => { disconnectFromColyseus(); }; }, []);useColyseusRoomAccess the Colyseus room object. Shouldn't be used to access the state,
room.stateis not updated. UseuseColyseusStateinstead.Parameters:
Return:
RoomExample:
const room = useColyseusRoom(); if (!room) return null; console.log(room.sessionId);useColyseusState
Access the Colyseus room state. Returns the complete state object updated in real-time. Use a selector to prevent re-renderings.
Parameters:
- selector?:
(state: S) => unknown
Return:
RoomExample:
const clients = useColyseusState((state) => state.clients); // Only re-render if `state.clients` has changed // or const state = useColyseusState(); // Causes a lot of re-renderings
Acknowledgements
- Endel Dreyer: Creating such a powerful and easy to use network framework.
- Douglas Delavy: Partnership during the development of this package.