feat: chat v lobby
This commit is contained in:
1 parent
9a3987a2fa
commit
6beb15afe3
10 files changed
+130
-2
No files matched your search
@@ -1,3 +1,4 @@
|
||||
[
|
||||
"U oběda v restauraci si můžete zadat cenu (ikonka cenovky u vaší volby) — promítne se do měsíčního přehledu stravování a předvyplní se i v „Zaplatit za všechny“"
|
||||
"U oběda v restauraci si můžete zadat cenu (ikonka cenovky u vaší volby) — promítne se do měsíčního přehledu stravování a předvyplní se i v „Zaplatit za všechny“",
|
||||
"V lobby miniher (Pong, Reakční hra, Had, Tetris, Tanky) si hráči mohou psát v chatu, emotikony se vkládají jedním kliknutím 😉"
|
||||
]
|
||||
+17
-1
@@ -1,4 +1,4 @@
|
||||
import { Socket } from "socket.io";
|
||||
import { Server, Socket } from "socket.io";
|
||||
import { getLogin } from "./auth";
|
||||
|
||||
/** Sdílené pomůcky pro websocketové minihry (reakční hra, had). */
|
||||
@@ -60,3 +60,19 @@ export function gameHandler(socket: Socket, errorEvent: string, action: (login:
|
||||
|
||||
/** Minimální počet hráčů — lokálně lze hrát i sám. */
|
||||
export const minPlayersForEnv = (prod: number) => process.env.NODE_ENV === 'development' ? 1 : prod;
|
||||
|
||||
/**
|
||||
* Jednoduchý chat v lobby miniher — zprávy se nikde neukládají, server je jen
|
||||
* přepošle všem (klient si je filtruje podle hry).
|
||||
*/
|
||||
export function registerLobbyChat(io: Server) {
|
||||
io.on('connection', socket => {
|
||||
socket.on('lobbychat:send', gameHandler(socket, 'lobbychat:error', (login, payload) => {
|
||||
const { game, text } = (payload ?? {}) as { game?: unknown, text?: unknown };
|
||||
if (typeof game !== 'string' || typeof text !== 'string') return;
|
||||
const trimmed = text.trim().slice(0, 200);
|
||||
if (!trimmed) return;
|
||||
io.emit('lobbychat:message', { game: game.slice(0, 20), login, text: trimmed });
|
||||
}));
|
||||
});
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import { registerTetrisGame } from "./tetrisGame";
|
||||
import { registerPongGame } from "./pongGame";
|
||||
import { registerDrawingGame } from "./drawingGame";
|
||||
import { registerTankGame } from "./tankGame";
|
||||
import { registerLobbyChat } from "./minigames";
|
||||
|
||||
let io: Server<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap, any>;
|
||||
let pubClient: ReturnType<typeof createClient>;
|
||||
@@ -40,6 +41,7 @@ export const initWebsocket = (server: any) => {
|
||||
registerPongGame(io);
|
||||
registerDrawingGame(io);
|
||||
registerTankGame(io);
|
||||
registerLobbyChat(io);
|
||||
return io;
|
||||
};
|
||||
|
||||
|
||||
Reference in new issue
Block a user