Skip to main content

Transport

Transport is a server-side WebSocket client that connects to Voxelize from external Node.js processes. It receives the same real-time events that browser clients receive, enabling backend services to react to game activity.

Unlike Methods and Events which handle in-game client-server communication, Transport is for out-of-game services that need to observe or interact with your world.

Use Cases

ServiceWhat It Does
Discord botPosts join/leave/chat messages to a channel
Analytics serviceLogs player activity and game events to a database
Asset managerCleans up uploaded files when associated blocks are destroyed
REST APIExposes game state (player positions, entity counts) via HTTP

Basic Setup

Connecting to Voxelize
import { Transport } from "@voxelize/protocol";

const transport = new Transport(5000);

await transport.connect("http://localhost:4000", "your-secret-key");

The secret authenticates the Transport as a trusted listener. Configure it on your Voxelize server.

Event Handlers

Assign callbacks to react to game events:

Available Handlers
transport.onInit; // World initialized with existing state
transport.onJoin; // Player connected
transport.onLeave; // Player disconnected
transport.onPeer; // Player position/metadata changed
transport.onEntity; // Entity created/updated/deleted
transport.onChat; // Chat message sent
transport.onUpdate; // Voxel changed
transport.onMethod; // RPC call received
transport.onEvent; // Custom event fired

Example: Join/Leave Notifications

Tracking Players
const playerCache = new Map<string, { username: string }>();

transport.onPeer = (event) => {
event.peers?.forEach((peer) => {
playerCache.set(peer.id, { username: peer.username });
});
};

transport.onJoin = async (event) => {
const player = playerCache.get(event.text);
console.log(`${player?.username} joined ${event.worldName}`);
};

transport.onLeave = async (event) => {
const player = playerCache.get(event.text);
console.log(`${player?.username} left`);
playerCache.delete(event.text);
};

Connection Lifecycle

Transport auto-reconnects when the connection drops:

The constructor argument sets the reconnection interval in milliseconds:

Reconnection Interval
const transport = new Transport(5000); // Retry every 5 seconds

Transport vs Methods vs Events

NeedUse
External service needs game dataTransport
Client triggers server actionMethods
Server broadcasts to clientsEvents

See TypeScript Transport Tutorial for complete implementation examples including Discord bot integration and asset cleanup services.