46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import { BlockChange, ClientMessage, PlayerInfo, ServerMessage } from "$/common/protocol.ts";
|
|
import type { ModListing } from "$/common/mod_loader.ts";
|
|
import type { Join, ServerSocket, Welcome } from "./handshake.ts";
|
|
|
|
export class Connection {
|
|
#server: ServerSocket;
|
|
id: string;
|
|
name: string;
|
|
seed: string;
|
|
mods: ModListing[];
|
|
initial_changes: BlockChange[];
|
|
spawn: { x: number; y: number; z: number; yaw: number; pitch: number };
|
|
selected_slot: number;
|
|
// who was already there when we joined, they become entities in the level
|
|
initial_players: PlayerInfo[];
|
|
|
|
constructor(server: ServerSocket, welcome: Welcome, join: Join) {
|
|
this.#server = server;
|
|
this.id = join.id;
|
|
this.name = join.name;
|
|
this.seed = welcome.seed;
|
|
this.mods = welcome.mods;
|
|
this.initial_changes = join.changes;
|
|
this.spawn = join.spawn;
|
|
this.selected_slot = join.selected_slot;
|
|
this.initial_players = join.players;
|
|
}
|
|
|
|
// handled by the packet listener inside the game loop, not whenever the socket feels like it
|
|
get incoming(): ServerMessage[] {
|
|
return this.#server.messages;
|
|
}
|
|
|
|
get closed() {
|
|
return this.#server.closed;
|
|
}
|
|
|
|
send(message: ClientMessage) {
|
|
this.#server.send(message);
|
|
}
|
|
}
|
|
|
|
export function get_player_name(): string {
|
|
return new URLSearchParams(location.search).get("name") ?? "";
|
|
}
|