From 94d6cf984f3e7a482122d2c9b6062e25788f1e8e Mon Sep 17 00:00:00 2001 From: Andrew nuark G Date: Sun, 5 Mar 2023 20:12:51 +0700 Subject: [PATCH] Fixed sub/unsub problem --- lib/ui/pages/game_page.dart | 138 ++++++++++++++++++----------------- lib/ui/pages/home_page.dart | 139 +++++++++++++++++++----------------- 2 files changed, 146 insertions(+), 131 deletions(-) diff --git a/lib/ui/pages/game_page.dart b/lib/ui/pages/game_page.dart index 3e1fd6c..b08ebf5 100644 --- a/lib/ui/pages/game_page.dart +++ b/lib/ui/pages/game_page.dart @@ -32,59 +32,14 @@ class _GamePageState extends State { void initState() { super.initState(); - socket.on("hello", (idky) { - socket.dispose(); - Get.offAllNamed("/auth"); - }); - - socket.on("gameStatus", (data) { - bool won = data[0]; - Get.defaultDialog( - title: "Game ended", - middleText: won ? "You won!" : "You lost!", - barrierDismissible: false, - onConfirm: () { - Get.put(authData); - Get.put(socket); - Get.offAllNamed("/home"); - }, - ); - }); - - socket.on("leaveGameResponse", (data) { - if (data[0] == true && data[1] == 410) { - Get.defaultDialog( - title: "Game ended", - middleText: "Your opponent left the game", - barrierDismissible: false, - onConfirm: () { - Get.put(authData); - Get.put(socket); - Get.offAllNamed("/home"); - }, - ); - } else { - Get.put(authData); - Get.put(socket); - Get.offAllNamed("/home"); - } - }); - - socket.on("chatResponse", (data) { - bool ok = data[0]; - if (ok) { - chat.add(ChatEntry(data[1]["from"], data[1]["message"])); - } - }); - + socket.on("hello", _onHelloEvent); + socket.on("gameStatus", _onGameStatusEvent); + socket.on("leaveGameResponse", _onLeaveGameResponseEvent); + socket.on("chatResponse", _onChatResponseEvent); if (isGuesser) { - socket.on("guessResponse", _onGuessResponse); + socket.on("guessResponse", _onGuessResponseEvent); } else { - socket.on("guess", (data) { - setState(() { - guessedColors.add(data); - }); - }); + socket.on("guess", _onGuessEvent); } chat.listen((data) { @@ -93,14 +48,74 @@ class _GamePageState extends State { }); } + void _onHelloEvent(dynamic idky) { + socket.dispose(); + Get.offAllNamed("/auth"); + } + + void _onGameStatusEvent(dynamic data) { + bool won = data[0]; + Get.defaultDialog( + title: "Game ended", + middleText: won ? "You won!" : "You lost!", + barrierDismissible: false, + onConfirm: () { + Get.put(authData); + Get.put(socket); + Get.offAllNamed("/home"); + }, + ); + } + + void _onLeaveGameResponseEvent(dynamic data) { + if (data[0] == true && data[1] == 410) { + Get.defaultDialog( + title: "Game ended", + middleText: "Your opponent left the game", + barrierDismissible: false, + onConfirm: () { + Get.put(authData); + Get.put(socket); + Get.offAllNamed("/home"); + }, + ); + } else { + Get.put(authData); + Get.put(socket); + Get.offAllNamed("/home"); + } + } + + void _onChatResponseEvent(dynamic data) { + bool ok = data[0]; + if (ok) { + chat.add(ChatEntry(data[1]["from"], data[1]["message"])); + } + } + + void _onGuessEvent(dynamic data) { + setState(() { + guessedColors.add(data); + }); + } + + void _onGuessResponseEvent(dynamic data) { + bool ok = data[0]; + if (ok) { + Get.snackbar("Success", "Guess sent successfully"); + } else { + Get.snackbar("Error", "Guess failed to send"); + } + } + @override void dispose() { - socket.off("hello"); - socket.off("gameStatus"); - socket.off("leaveGameResponse"); - socket.off("chatResponse"); - socket.off("guessResponse"); - socket.off("guess"); + socket.off("hello", _onHelloEvent); + socket.off("gameStatus", _onGameStatusEvent); + socket.off("leaveGameResponse", _onLeaveGameResponseEvent); + socket.off("chatResponse", _onChatResponseEvent); + socket.off("guessResponse", _onGuessResponseEvent); + socket.off("guess", _onGuessEvent); super.dispose(); } @@ -352,15 +367,6 @@ class _GamePageState extends State { socket.emit("guess", [gameInfo.id, name]); } - void _onGuessResponse(dynamic data) { - bool ok = data[0]; - if (ok) { - Get.snackbar("Success", "Guess sent successfully"); - } else { - Get.snackbar("Error", "Guess failed to send"); - } - } - void _openChat() { Get.bottomSheet(BottomSheet( onClosing: () {}, diff --git a/lib/ui/pages/home_page.dart b/lib/ui/pages/home_page.dart index 07b5f17..a69393c 100644 --- a/lib/ui/pages/home_page.dart +++ b/lib/ui/pages/home_page.dart @@ -31,78 +31,87 @@ class _HomePageState extends State { void initState() { super.initState(); - socket.on("hello", (idky) { - socket.dispose(); - Get.offAllNamed("/auth"); - }); + socket.on("hello", _onHelloEvent); + socket.on("update", _onUpdateEvent); + socket.on("updateNeeded", _onUpdateNeededEvent); + socket.on("removeGameResponse", _onRemoveGameResponseEvent); + socket.on("createGameResponse", _onCreateGameResponseEvent); + socket.on("getUserDataResponse", _onGetUserDataResponseEvent); + socket.on("joinGameResponse", onJoinGameResponseEvent); - socket.on("update", (update) { - bool ok = update[0]; - if (ok) { - var data = update[1]; - availableGames.value = (data["availableGames"] as List? ?? []) - .map((e) => AvailableGame( - id: e["id"], - opponentName: e["player"], - tries: e["tries"], - neededRole: e["neededRole"], - )) - .toList(growable: false); - } else { - Get.snackbar("Error", "Update failed with message: ${update[1]}"); - } - }); - - socket.on("updateNeeded", (data) { - socket.emit("getUpdate"); - }); - - socket.on("removeGameResponse", (data) => null); - socket.on("createGameResponse", (data) => null); - - socket.on("getUserDataResponse", (data) { - bool ok = data[0]; - if (ok) { - userData = UserData( - data[1]["client"]["wins"], - data[1]["client"]["losses"], - ); - } else { - Get.snackbar("Error", "Failed to get user data:\n ${data[1]}"); - } - }); socket.emit("getUserData"); - - socket.on("joinGameResponse", (data) { - bool ok = data[0]; - if (ok) { - Get.put(authData); - Get.put(socket); - Get.put(Game( - data[1]["id"], - data[1]["guesser"], - data[1]["suggester"], - data[1]["tries"], - (data[2] as List).map((e) => e.toString()).toSet(), - )); - Get.offNamed("/game"); - } else { - Get.snackbar("Request response", data[1]); - } - }); - socket.emit("getUpdate"); } + void _onHelloEvent(dynamic idky) { + socket.dispose(); + Get.offAllNamed("/auth"); + } + + void _onUpdateEvent(dynamic update) { + bool ok = update[0]; + if (ok) { + var data = update[1]; + availableGames.value = (data["availableGames"] as List? ?? []) + .map((e) => AvailableGame( + id: e["id"], + opponentName: e["player"], + tries: e["tries"], + neededRole: e["neededRole"], + )) + .toList(growable: false); + } else { + Get.snackbar("Error", "Update failed with message: ${update[1]}"); + } + } + + void _onUpdateNeededEvent(dynamic data) { + socket.emit("getUpdate"); + } + + void _onRemoveGameResponseEvent(dynamic data) {} + + void _onCreateGameResponseEvent(dynamic data) {} + + void _onGetUserDataResponseEvent(dynamic data) { + bool ok = data[0]; + if (ok) { + userData = UserData( + data[1]["client"]["wins"], + data[1]["client"]["losses"], + ); + } else { + Get.snackbar("Error", "Failed to get user data:\n ${data[1]}"); + } + } + + void onJoinGameResponseEvent(dynamic data) { + bool ok = data[0]; + if (ok) { + Get.put(authData); + Get.put(socket); + Get.put(Game( + data[1]["id"], + data[1]["guesser"], + data[1]["suggester"], + data[1]["tries"], + (data[2] as List).map((e) => e.toString()).toSet(), + )); + Get.offNamed("/game"); + } else { + Get.snackbar("Request response", data[1]); + } + } + @override void dispose() { - socket.off("hello"); - socket.off("update"); - socket.off("updateNeeded"); - socket.off("removeGameResponse"); - socket.off("createGameResponse"); - socket.off("getUserDataResponse"); - socket.off("joinGameResponse"); + socket.off("hello", _onHelloEvent); + socket.off("update", _onUpdateEvent); + socket.off("updateNeeded", _onUpdateNeededEvent); + socket.off("removeGameResponse", _onRemoveGameResponseEvent); + socket.off("createGameResponse", _onCreateGameResponseEvent); + socket.off("getUserDataResponse", _onGetUserDataResponseEvent); + socket.off("joinGameResponse", onJoinGameResponseEvent); super.dispose(); }