WIP ws messages, TODO backend receiving frontend messages
This commit is contained in:
@@ -5,6 +5,7 @@ import 'package:frontend/providers/game_messages.dart';
|
||||
import 'package:frontend/providers/web_socket.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:shared_models/room.dart';
|
||||
|
||||
final logger = Logger('GameRoomHome');
|
||||
|
||||
@@ -30,17 +31,33 @@ class _GameRoomHomeState extends ConsumerState<GameRoomHome> {
|
||||
if (jwt == null || jwt.roomUuid != widget.roomUuid) {
|
||||
logger.fine('Tried to open room, but not authenticated / wrong room');
|
||||
// return home
|
||||
context.go('/');
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) => context.go('/'));
|
||||
}
|
||||
|
||||
final connection = ref.watch(webSocketNotifierProvider).valueOrNull;
|
||||
|
||||
ref.listen(
|
||||
gameMessageNotifierProvider,
|
||||
(previous, next) {
|
||||
print('Got message: $next');
|
||||
},
|
||||
);
|
||||
if (jwt != null) {
|
||||
ref.listen(
|
||||
gameMessageNotifierProvider,
|
||||
(previous, next) {
|
||||
final message = next.valueOrNull;
|
||||
if (message is GameRoomMessage) {
|
||||
switch (message) {
|
||||
case PingMessage():
|
||||
final ping = PingMessage.now(
|
||||
jwt.roomUuid,
|
||||
dest: PingDestination.server,
|
||||
userUuid: jwt.uuid,
|
||||
);
|
||||
ref.read(webSocketNotifierProvider.notifier).sendMessage(ping);
|
||||
case PlayerVoteMessage():
|
||||
// TODO: Handle this case.
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
// enstablish ws connection at /room/roomCode/ws and save to gameMessageProvider
|
||||
return Scaffold(
|
||||
body: Column(
|
||||
|
||||
@@ -120,22 +120,6 @@ class _JoinRoomHomeState extends ConsumerState<JoinRoomHome> {
|
||||
code: _codeController.text,
|
||||
),
|
||||
);
|
||||
// )
|
||||
// .whenData(
|
||||
// (response) {
|
||||
// if (response != null && response.uuid != null) {
|
||||
// logger.fine('Navigating to room ${response.uuid}');
|
||||
// // context.go('room/${response.uuid}');
|
||||
// } else {
|
||||
// ScaffoldMessenger.of(context).showSnackBar(
|
||||
// SnackBar(
|
||||
// content: Text('Unexpected error occurred.'),
|
||||
// backgroundColor: Colors.red,
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
// },
|
||||
// );
|
||||
} finally {
|
||||
setState(() => _isLoading = false);
|
||||
}
|
||||
|
||||
@@ -19,15 +19,15 @@ Future<JoinRoomResponse?> joinRoom(Ref ref, {required String username, required
|
||||
data: JoinRoomRequest(username: username, roomCode: code).toJson(),
|
||||
);
|
||||
|
||||
if (response.statusCode == 200 && response.data != null) {
|
||||
final joinResponse = JoinRoomResponse.fromJson(response.data!);
|
||||
final joinResponse = JoinRoomResponse.fromJson(response.data!);
|
||||
if (joinResponse.success) {
|
||||
if (joinResponse.token != null) {
|
||||
logger.fine('Setting token: ${joinResponse.token!.substring(10)}');
|
||||
await ref.read(jwtNotifierProvider.notifier).setJwt(joinResponse.token!);
|
||||
}
|
||||
return joinResponse;
|
||||
} else {
|
||||
logger.warning('Could not join room');
|
||||
logger.warning('Could not join room: ${joinResponse.toJson()}');
|
||||
}
|
||||
} catch (e) {
|
||||
logger.severe('Failed to join room', e, StackTrace.current);
|
||||
|
||||
Reference in New Issue
Block a user