Working websocket client with reactivity

This commit is contained in:
Pablu23
2025-10-09 17:36:10 +02:00
parent 1f3813ea78
commit b5fa852634
4 changed files with 20 additions and 39 deletions

View File

@@ -22,14 +22,14 @@
selectedPlaylistId: settings.selectedPlaylistId selectedPlaylistId: settings.selectedPlaylistId
}); });
$effect(() => { // $effect(() => {
// Update local settings when change // // Update local settings when change
localSettings = { // localSettings = {
maxPlayers: settings.maxPlayers, // maxPlayers: settings.maxPlayers,
gameMode: settings.gameMode, // gameMode: settings.gameMode,
selectedPlaylistId: settings.selectedPlaylistId // selectedPlaylistId: settings.selectedPlaylistId
}; // };
}); // });
function updateMaxPlayers(value: number) { function updateMaxPlayers(value: number) {
if (value >= 2 && value <= 16) { if (value >= 2 && value <= 16) {

View File

@@ -1,13 +1,13 @@
import type { Player, Settings, WebSocketMessage } from './types'; import type { Player, Settings, WebSocketMessage } from './types';
export class WebsocketClient { export class WebsocketClient {
connected = false; connected = $state(false);
players: Player[] = []; players: Player[] = $state([]);
gameSettings: Settings = { gameSettings: Settings = $state({
maxPlayers: 8, maxPlayers: 8,
gameMode: 'classic', gameMode: 'classic',
selectedPlaylistId: 1 selectedPlaylistId: 1
}; });
socket: WebSocket | null = null; socket: WebSocket | null = null;
connect(url: string): void { connect(url: string): void {
@@ -74,6 +74,9 @@ export class WebsocketClient {
this.players = []; this.players = [];
} }
} }
export const wsClient = new WebsocketClient();
// //
// export function createWebSocketClient() { // export function createWebSocketClient() {
// let socket: WebSocket | null = null; // let socket: WebSocket | null = null;

View File

@@ -51,4 +51,4 @@ export const load: PageServerLoad = async ({ url, cookies }) => {
cookies.set("session_id", session.id, { path: "/", secure: /^true$/i.test(env.PUBLIC_SECURE ?? "true") }); cookies.set("session_id", session.id, { path: "/", secure: /^true$/i.test(env.PUBLIC_SECURE ?? "true") });
redirect(307, "/") redirect(307, "/")
}; };

View File

@@ -1,15 +1,12 @@
<script lang="ts"> <script lang="ts">
import { onMount, onDestroy } from 'svelte'; import { onMount, onDestroy } from 'svelte';
import { WebsocketClient } from '$lib/websocketClient'; import { wsClient } from '$lib/websocketClient.svelte';
import type { Settings, GameMode, Playlist } from '$lib/types'; import type { Settings, GameMode, Playlist } from '$lib/types';
import PlayerList from '$lib/components/PlayerList.svelte'; import PlayerList from '$lib/components/PlayerList.svelte';
import GameSettings from '$lib/components/GameSettings.svelte'; import GameSettings from '$lib/components/GameSettings.svelte';
// Create WebSocket client // Create WebSocket client
let wsClient = new WebsocketClient();
let connected = $state(wsClient.connected);
// Current user state // Current user state
let isHost = $state(true); // Assume current user is host for this example let isHost = $state(true); // Assume current user is host for this example
let lobbyCode = $state('GAME123'); let lobbyCode = $state('GAME123');
@@ -32,6 +29,7 @@
function handleSettingsUpdate(settings: Settings) { function handleSettingsUpdate(settings: Settings) {
// Send updated settings to other players via websocket // Send updated settings to other players via websocket
wsClient.gameSettings = settings;
wsClient.sendMessage({ wsClient.sendMessage({
type: 'settingsUpdate', type: 'settingsUpdate',
settings: settings settings: settings
@@ -56,28 +54,8 @@
// In a real app, you'd likely redirect to another page here // In a real app, you'd likely redirect to another page here
} }
// Initialize mock data for demo
function initializeMockData() {
// Simulate WebSocket connection and receiving initial player data
// setTimeout(() => {
// console.log("Init mock data");
// wsClient.players = [
// { id: 1, name: 'YourName', isHost: true },
// { id: 2, name: 'Player2', isHost: false },
// { id: 3, name: 'GamerX', isHost: false }
// ];
// wsClient.connected = true;
// }, 500);
}
onMount(() => { onMount(() => {
// In a real app, connect to WebSocket server wsClient.connect(`ws://localhost/api/lobby?id=${lobbyCode}`);
// wsClient.connect('ws://example.com/game-lobby');
wsClient.connect('ws://localhost:3000/ws?lobby_id=test');
// For demo purposes, we'll simulate a connection
// initializeMockData();
}); });
onDestroy(() => { onDestroy(() => {
@@ -111,7 +89,7 @@
<div class="grid grid-cols-1 md:grid-cols-3 gap-6"> <div class="grid grid-cols-1 md:grid-cols-3 gap-6">
<!-- Left column: Player list --> <!-- Left column: Player list -->
<div class="md:col-span-1"> <div class="md:col-span-1">
{#if connected} {#if wsClient.connected}
<PlayerList <PlayerList
players={wsClient.players} players={wsClient.players}
maxPlayers={wsClient.gameSettings.maxPlayers} maxPlayers={wsClient.gameSettings.maxPlayers}