dugmm-server
v0.0.2
Published
A multiplayer game server manager built with Express, Socket.io, and SQLite.
Readme
dugmm-server
A multiplayer game server manager built with Express, Socket.io, and SQLite.
⚠️ IMPORTANT: BUN RUNTIME REQUIRED
This package utilizes
bun:sqlite, which is specific to the Bun runtime. This package will NOT work in a standard Node.js environment.
Installation
bun add dugmm-serverUsage
Basic Setup
import { Manager } from "dugmm-server";
// Initialize the manager
const manager = new Manager({
dev: true, // Toggles dev mode (affects DB naming)
sqlDir: "./sql" // Directory where SQLite files will be stored
});
// Start listening
manager.listen(3000, () => {
console.log("Multiplayer server running on port 3000");
});Custom Express App
You can pass an existing Express instance if you want to add your own HTTP routes:
import express from "express";
import { Manager } from "dugmm-server";
const app = express();
app.get("/health", (req, res) => res.send("OK"));
const manager = new Manager({
app: app,
dev: false,
sqlDir: "./sql"
});
manager.listen(3000, () => {
console.log("Server running...");
});Features
- Room Management: Create, update, and delete game rooms.
- Player Management: Track players, connection status, and associated data.
- Housekeeping: Automatically cleans up old or stale rooms and players.
- Socket.io Integration: Built-in event handling for real-time communication.
- Persistence: Uses SQLite for data storage.
Socket Events
The server listens for and emits the following events.
Create
createRoom
- Input:
{} - Output:
{ key: string } - Description: Creates a new room and joins the socket to it.
createPlayer
- Input:
{ displayName: string, roomKey: string } - Output:
{ error?: string, id: number, player: Player, players: Player[] } - Broadcast:
{ id: number, player: Player, players: Player[] }(to room) - Description: Creates a player in the specified room.
Read
getPlayer
- Input:
{ id: number } - Output:
{ player: Player }
getRoom
- Input:
{ roomKey: string } - Output:
{ room: Room }
getPlayersInRoom
- Input:
{ roomKey: string } - Output:
{ players: Player[] }
Update
updateRoom
- Input:
{ roomKey: string, data: string }(data must be stringified JSON) - Output:
{ error?: string, room: Room, players: Player[] } - Broadcast:
{ room: Room, players: Player[] }(to room)
updatePlayer
- Input:
{ id: number, data: string }(data must be stringified JSON) - Output:
{ error?: string, player: Player, id: number } - Broadcast:
{ player: Player, id: number }(to room)
Delete
deletePlayer
- Input:
{ id: number } - Output:
{ error?: string, success: boolean } - Broadcast:
{ player: Player }(to room)
deleteRoom
- Input:
{ roomKey: string } - Output:
{ error?: string, success: boolean } - Broadcast:
{ players: Player[], room: Room }(to room)
Connection Handling
reconnect
- Input:
{ id: number } - Output:
{ error?: string, player: Player, room: Room } - Broadcast:
{ player: Player, room: Room }(to room) - Description: Re-associates a socket with an existing player ID.
broadcast/disconnect
- Broadcast:
{ player: Player, id: number } - Description: Sent to the room when a player socket disconnects.
broadcast/deleteRoom
- Broadcast:
{ roomKey: string } - Description: Sent when a room is deleted by the housekeeper or explicitly.
License
ISC
