mirror of
https://github.com/jcreek/EstimationPoker.git
synced 2026-07-14 03:23:45 +00:00
Merge pull request #19 from jcreek/5-add-the-ability-to-select-pre-defined-card-sets-eg-fibonaccimodified-fibonacci
feat(#5): Add the ability to select pre-defined card sets
This commit is contained in:
@@ -1,12 +1,43 @@
|
||||
import { WebSocket } from 'ws';
|
||||
import { User } from './User';
|
||||
|
||||
class CardSet {
|
||||
name: string;
|
||||
values: Array<string | number>;
|
||||
example: string;
|
||||
|
||||
constructor(name: string, values: Array<string | number>, example: string) {
|
||||
this.name = name;
|
||||
this.values = values;
|
||||
this.example = example;
|
||||
}
|
||||
}
|
||||
|
||||
export const cardSets: Array<CardSet> = [
|
||||
{ name: 'Fibonacci', values: [1, 2, 3, 5, 8, 13, 21, '?'], example: '(1, 2, 3, 5)' },
|
||||
{
|
||||
name: 'T-Shirt Sizing',
|
||||
values: ['XS', 'S', 'M', 'L', 'XL', 'XXL', '?'],
|
||||
example: '(XS, S, M, L)'
|
||||
},
|
||||
{ name: 'Powers of 2', values: [1, 2, 4, 8, 16, 32, '?'], example: '(1, 2, 4, 8)' },
|
||||
{ name: 'Sequential', values: [1, 2, 3, 4, 5, 6, 7, 8, 9, '?'], example: '(1, 2, 3, 4)' }
|
||||
];
|
||||
|
||||
export class Room {
|
||||
id: string;
|
||||
cardSet: CardSet;
|
||||
users: Map<WebSocket, User>;
|
||||
|
||||
constructor(id: string) {
|
||||
constructor(id: string, cardSetName: string) {
|
||||
this.id = id;
|
||||
const cardSet = cardSets.find((cardSet) => cardSet.name === cardSetName);
|
||||
if (cardSet) {
|
||||
this.cardSet = cardSet;
|
||||
} else {
|
||||
this.cardSet = cardSets[0];
|
||||
}
|
||||
|
||||
this.users = new Map();
|
||||
}
|
||||
|
||||
|
||||
+14
-6
@@ -1,6 +1,6 @@
|
||||
import express from 'express';
|
||||
import { WebSocketServer, WebSocket } from 'ws';
|
||||
import { Room } from './classes/Room.js';
|
||||
import { Room, cardSets } from './classes/Room.js';
|
||||
import { User } from './classes/User.js';
|
||||
import { JoinRoomMessage } from './classes/messages/JoinRoomMessage.js';
|
||||
import { ChangeEstimateMessage } from './classes/messages/ChangeEstimateMessage.js';
|
||||
@@ -62,23 +62,31 @@ wss.on('connection', (ws: WebSocket, req) => {
|
||||
|
||||
ws.on('error', onSocketPostError);
|
||||
|
||||
function createRoom(roomId: string, cardSetName: string) {
|
||||
room = new Room(roomId, cardSetName);
|
||||
rooms.add(room);
|
||||
}
|
||||
|
||||
ws.on('message', (message) => {
|
||||
const data = JSON.parse(message.toString());
|
||||
|
||||
if (data.type === 'join-room') {
|
||||
if (data.type === 'create-room') {
|
||||
const roomId = data.roomId;
|
||||
const cardSetName = data.cardSetName;
|
||||
createRoom(roomId, cardSetName);
|
||||
} else if (data.type === 'join-room') {
|
||||
const joinRoomMessage: JoinRoomMessage = data as JoinRoomMessage;
|
||||
const { roomId, userId, name } = joinRoomMessage;
|
||||
room = getRoomById(roomId);
|
||||
|
||||
// Create room if it doesn't already exist
|
||||
if (!room) {
|
||||
room = new Room(roomId);
|
||||
rooms.add(room);
|
||||
createRoom(roomId, data.cardSetName);
|
||||
}
|
||||
|
||||
// Create the user in the room
|
||||
const user = new User(userId, name);
|
||||
room.addUser(ws, user);
|
||||
room!.addUser(ws, user);
|
||||
|
||||
broadcastToRoom(roomId, { type: 'user-joined', message: `${name} has joined the room` });
|
||||
} else if (data.type === 'select-estimate') {
|
||||
@@ -144,7 +152,7 @@ wss.on('connection', (ws: WebSocket, req) => {
|
||||
} else if (data.type === 'get-user-estimates') {
|
||||
if (room) {
|
||||
const users = room.getUsers();
|
||||
broadcastToRoom(room.id, { type: 'user-estimates', users });
|
||||
broadcastToRoom(room.id, { type: 'user-estimates', users, selectedCardSet: room.cardSet });
|
||||
}
|
||||
} else if (data.type === 'trigger-emoji') {
|
||||
const { cardId, emoji } = data;
|
||||
|
||||
Reference in New Issue
Block a user