62 lines
2.1 KiB
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));
|
|
}
|
|
}
|
|
}
|