generated from legonzaur/webapp-front
Initial commit
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import { useGameStore } from "~/store/game.store";
|
||||
import type {
|
||||
GameDeleteEvent,
|
||||
GameEndTurnEvent,
|
||||
GameJoinEvent,
|
||||
GameMessageDeleteEvent,
|
||||
GameMessageEvent,
|
||||
GameStartEvent,
|
||||
} from "../events/game.events";
|
||||
import type { GameResponseDTO } from "../events/dto/gameresponse.dto";
|
||||
import { useUserStore } from "~/store/user.store";
|
||||
|
||||
export const handlers = {
|
||||
joingame: (event: GameJoinEvent) => {
|
||||
const gameStore = useGameStore();
|
||||
gameStore.game.players.push(event.player);
|
||||
},
|
||||
start: (event: GameStartEvent) => {
|
||||
const gameStore = useGameStore();
|
||||
const userStore = useUserStore();
|
||||
gameStore.game.started = true;
|
||||
gameStore.game.currentPlayer = event.currentPlayer;
|
||||
gameStore.currentWord = null;
|
||||
if (userStore.self && userStore.self.id == event.currentPlayer.userId) {
|
||||
void gameStore.getCurrentWord(gameStore.game.id);
|
||||
}
|
||||
},
|
||||
delete: async (event: GameDeleteEvent) => {
|
||||
const gameStore = useGameStore();
|
||||
gameStore.game = {} as GameResponseDTO;
|
||||
alert("Game deleted");
|
||||
await navigateTo("/");
|
||||
},
|
||||
message: (event: GameMessageEvent) => {
|
||||
const gameStore = useGameStore();
|
||||
gameStore.game.messages.push(event.message);
|
||||
if (!event.message.authorId) {
|
||||
const player = gameStore.game.players.find(
|
||||
(p) => p.userId == event.message.value,
|
||||
);
|
||||
if (player) {
|
||||
player.score++;
|
||||
}
|
||||
}
|
||||
},
|
||||
deleteMessage: (event: GameMessageDeleteEvent) => {
|
||||
const gameStore = useGameStore();
|
||||
const index = gameStore.game.messages.findIndex(
|
||||
(m) => m.id == event.messageId,
|
||||
);
|
||||
gameStore.game.messages.splice(index, 1);
|
||||
},
|
||||
endTurn: (event: GameEndTurnEvent) => {
|
||||
const gameStore = useGameStore();
|
||||
const userStore = useUserStore();
|
||||
gameStore.game.players.forEach((p) => (p.hasGuessed = false));
|
||||
gameStore.game.messages = [];
|
||||
gameStore.game.currentPlayer = event.currentPlayer;
|
||||
if (userStore.self && userStore.self.id == event.currentPlayer.userId) {
|
||||
void gameStore.getCurrentWord(gameStore.game.id);
|
||||
}
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,34 @@
|
||||
import { useLobbyStore } from "~/store/lobby.store";
|
||||
import type {
|
||||
LobbyCreateEvent,
|
||||
LobbyDeleteEvent,
|
||||
LobbyJoinEvent,
|
||||
LobbyLeaveEvent,
|
||||
LobbyStartEvent,
|
||||
} from "../events/lobby.events";
|
||||
|
||||
export const handlers = {
|
||||
create: (event: LobbyCreateEvent) => {
|
||||
const lobbyStore = useLobbyStore();
|
||||
lobbyStore.games[event.game.id] = event.game;
|
||||
},
|
||||
start: (event: LobbyStartEvent) => {
|
||||
const lobbyStore = useLobbyStore();
|
||||
lobbyStore.games[event.game.id].started = true;
|
||||
},
|
||||
delete: (event: LobbyDeleteEvent) => {
|
||||
const lobbyStore = useLobbyStore();
|
||||
delete lobbyStore.games[event.id];
|
||||
},
|
||||
joingame: (event: LobbyJoinEvent) => {
|
||||
const lobbyStore = useLobbyStore();
|
||||
lobbyStore.games[event.game.id].players.push(event.player);
|
||||
},
|
||||
leavegame: (event: LobbyLeaveEvent) => {
|
||||
const lobbyStore = useLobbyStore();
|
||||
const playerIndex = lobbyStore.games[event.game.id].players.findIndex(
|
||||
(p) => p.userId == event.player.userId,
|
||||
);
|
||||
lobbyStore.games[event.game.id].players.splice(playerIndex, 1);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,31 @@
|
||||
import { useWordStore } from "~/store/word.store";
|
||||
import {
|
||||
WordCreateEvent,
|
||||
WordDeleteEvent,
|
||||
WordDisableEvent,
|
||||
WordEditEvent,
|
||||
WordEnableEvent,
|
||||
} from "../events/word.events";
|
||||
|
||||
export const handlers = {
|
||||
create: (event: WordCreateEvent) => {
|
||||
const wordStore = useWordStore();
|
||||
wordStore.words[event.word.id] = event.word;
|
||||
},
|
||||
edit: (event: WordEditEvent) => {
|
||||
const wordStore = useWordStore();
|
||||
wordStore.words[event.word.id].value = event.word.value;
|
||||
},
|
||||
delete: (event: WordDeleteEvent) => {
|
||||
const wordStore = useWordStore();
|
||||
delete wordStore.words[event.id];
|
||||
},
|
||||
enable: (event: WordEnableEvent) => {
|
||||
const wordStore = useWordStore();
|
||||
wordStore.words[event.id].enabled = true;
|
||||
},
|
||||
disable: (event: WordDisableEvent) => {
|
||||
const wordStore = useWordStore();
|
||||
wordStore.words[event.id].enabled = false;
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,8 @@
|
||||
export function subscribe(endpoint: string) {
|
||||
const config = useRuntimeConfig();
|
||||
const evtSource = new EventSource(config.public.endpoint + endpoint, {
|
||||
withCredentials: true,
|
||||
});
|
||||
|
||||
return evtSource;
|
||||
}
|
||||
Reference in New Issue
Block a user