remove players on disconnect
This commit is contained in:
@@ -7,10 +7,12 @@ const deck = new Deck();
|
|||||||
export default class GameStore {
|
export default class GameStore {
|
||||||
private dms: Map<string, GameState>;
|
private dms: Map<string, GameState>;
|
||||||
private spectators: Map<string, GameState>;
|
private spectators: Map<string, GameState>;
|
||||||
|
private players: Map<string, string>;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.dms = new Map();
|
this.dms = new Map();
|
||||||
this.spectators = new Map();
|
this.spectators = new Map();
|
||||||
|
this.players = new Map();
|
||||||
}
|
}
|
||||||
|
|
||||||
createGameIDs() {
|
createGameIDs() {
|
||||||
@@ -61,6 +63,7 @@ export default class GameStore {
|
|||||||
|
|
||||||
game.players.add(playerID);
|
game.players.add(playerID);
|
||||||
game.lastUpdated = Date.now();
|
game.lastUpdated = Date.now();
|
||||||
|
this.players.set(playerID, gameID);
|
||||||
|
|
||||||
return this.gameUpdate(game);
|
return this.gameUpdate(game);
|
||||||
}
|
}
|
||||||
@@ -108,6 +111,15 @@ export default class GameStore {
|
|||||||
return { dmID, spectatorID, cards, settings };
|
return { dmID, spectatorID, cards, settings };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
playerExit(playerID: string): GameState {
|
||||||
|
const gameID = this.players.get(playerID);
|
||||||
|
|
||||||
|
if (!gameID) throw new Error(`Player ${playerID} not found`);
|
||||||
|
|
||||||
|
this.players.delete(playerID);
|
||||||
|
return this.leaveGame(gameID, playerID);
|
||||||
|
}
|
||||||
|
|
||||||
deleteGame(gameID: string): void {
|
deleteGame(gameID: string): void {
|
||||||
this.dms.delete(gameID);
|
this.dms.delete(gameID);
|
||||||
this.spectators.delete(gameID);
|
this.spectators.delete(gameID);
|
||||||
|
|||||||
14
server.ts
14
server.ts
@@ -52,7 +52,7 @@ app.prepare().then(() => {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
const error = e instanceof Error ? e.message : e;
|
const error = e instanceof Error ? e.message : e;
|
||||||
|
|
||||||
console.error(Date.now(), 'Error', error);
|
console.error(Date.now(), 'Error[join]', error);
|
||||||
socket.emit('join-error', error);
|
socket.emit('join-error', error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -67,7 +67,7 @@ app.prepare().then(() => {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
const error = e instanceof Error ? e.message : e;
|
const error = e instanceof Error ? e.message : e;
|
||||||
|
|
||||||
console.error(Date.now(), 'Error', error);
|
console.error(Date.now(), 'Error[flip-card]', error);
|
||||||
socket.emit('flip-error', error);
|
socket.emit('flip-error', error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -78,12 +78,18 @@ app.prepare().then(() => {
|
|||||||
broadcast('game-update', gameUpdate);
|
broadcast('game-update', gameUpdate);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
const error = e instanceof Error ? e.message : e;
|
const error = e instanceof Error ? e.message : e;
|
||||||
console.error(Date.now(), 'Error', error);
|
console.error(Date.now(), 'Error[settings]', error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on('disconnect', () => {
|
socket.on('disconnect', () => {
|
||||||
console.log(Date.now(), `Client disconnected: ${socket.id}`);
|
try {
|
||||||
|
const { dmID } = gameStore.playerExit(socket.id);
|
||||||
|
console.log(Date.now(), `Client disconnected: ${socket.id} from ${dmID}`);
|
||||||
|
} catch (e) {
|
||||||
|
const error = e instanceof Error ? e.message : e;
|
||||||
|
console.error(Date.now(), 'Error[disconnect]', error);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user