import 'package:web_socket_channel/web_socket_channel.dart'; import 'dart:convert'; class GameWebSocketClient { final String sessionId; final String userId; // Hämta användar-ID WebSocketChannel? _channel; Function(dynamic)? onChallengeReceived; //onChallengeReceived: En callback-funktion som anropas när ett nytt challenge tas emot från servern. Du behöver definiera denna funktion i dina Flutter-widgets för att uppdatera UI. Function()? onDisconnected; //onDisconnected: En callback-funktion som anropas när WebSocket-anslutningen stängs. GameWebSocketClient({required this.sessionId, required this.userId}); void connect() { final Uri uri = Uri.parse('ws://localhost:8080/ws/game/$sessionId?userId=$userId'); try { _channel = WebSocketChannel.connect(uri); //connect: Upprättar WebSocket-anslutningen till backend-endpointen med rätt sessionId och userId. _channel!.stream.listen((message) { try { final dynamic decodedMessage = jsonDecode(message); if (onChallengeReceived != null) { onChallengeReceived!(decodedMessage); } } catch (e) { print('Fel vid JSON-tolkning: $e'); } }, onDone: () { print('WebSocket-anslutning stängd'); if (onDisconnected != null) { onDisconnected!(); } }, onError: (error) { print('WebSocket-fel: $error'); if (_channel != null) { _channel!.sink.close(); } }); print('WebSocket ansluten till $uri'); } catch (e) { print('Kunde inte ansluta till WebSocket: $e'); if (_channel != null) { _channel!.sink.close(); } } } //disconnect: Stänger WebSocket-anslutningen. void disconnect() { if (_channel != null) { _channel!.sink.close(); _channel = null; print('WebSocket frånkopplad'); } } //send: Skickar ett meddelande till backend (om du behöver skicka spelarens svar eller annan information). Meddelandet konverteras till JSON. void send(dynamic message) { if (_channel != null) { _channel!.sink.add(jsonEncode(message)); } } }