HopSpotFrontend/lib/websocket/game_web_socket_client.dart

62 lines
2.1 KiB
Dart

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));
}
}
}