Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions server/performers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import * as Messages from "@common/messages";
import { findUnusedPosition, getNamedRoom } from "./rooms";
import { Performer } from "./types";

let performers: Performer[] = [];
export let performers: Performer[] = [];

export function logConnectedUsers(): void {
const connected = performers.filter(({ connected }) => connected);
Expand All @@ -22,7 +22,7 @@ export function logConnectedUsers(): void {
console.log(msg);

function names(people: Performer[]) {
return people.map(({ name }) => name).join(", ");
return people.map(({ name, position }) => `${name} (${position})`).join(", ");
}
}

Expand Down
10 changes: 6 additions & 4 deletions server/rooms.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
*/
import * as fs from "fs";
import { Room } from "./types";
import { performers } from "./performers";

const ROOM_CONFIG_PATH = "./config/rooms.json";
const DEFAULT_ROOM_NAME = "default";
Expand All @@ -20,8 +21,8 @@ const DEFAULT_ROOM_NAME = "default";
* specify a default room, use this instead. */
const DEFAULT_ROOM: Room = {
name: DEFAULT_ROOM_NAME,
rows: 1,
cols: 1,
rows: 3,
cols: 3,
performers: [],
};

Expand Down Expand Up @@ -54,21 +55,22 @@ if (fs.existsSync(ROOM_CONFIG_PATH)) {
export function getNamedRoom(roomName: string | null | undefined): Room {
const room = rooms[roomName || DEFAULT_ROOM_NAME];
if (!room) {
console.error(`Uknown room: ${roomName}`);
console.error(`Unknown room: ${roomName}`);
return rooms[DEFAULT_ROOM_NAME];
}
return room;
}

export function findUnusedPosition(room: Room) {
// collect the positions that are in use
const occupiedPositions = room.performers.map(({ position }) => position);
const occupiedPositions = performers.filter(({room}) => room.name == "default").map(({ position }) => position);
// create an array of available positions, and then remove the ones that are
// already in use.
const availablePositions = Array.from(
{ length: room.rows * room.cols },
(_, i) => i
).filter((p) => !occupiedPositions.includes(p));
console.log(`occupiedPositions: [${occupiedPositions}], availablePositions: [${availablePositions}]`);
return (
availablePositions.shift() ??
availablePositions.push(Math.max(...occupiedPositions) + 1)
Expand Down
6 changes: 1 addition & 5 deletions server/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,7 @@ export type Performer = Messages.Performer & {
/** The server-side representation of a room. */
export type Room = Messages.Room & {
name: string;
performers: {
id: string;
name: string;
position: number;
}[];
performers: Messages.Performer[];
};

export interface ClientToServerEvent {
Expand Down
4 changes: 2 additions & 2 deletions src/room.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import { Room } from "./types";
// run the client without the server.
export let room: Room = {
name: "local",
rows: 1,
cols: 1,
rows: 3,
cols: 3,
performers: [],
};

Expand Down