From 362b96574229246aaa7f7b89156963380d7ac886 Mon Sep 17 00:00:00 2001 From: Seraina Date: Sat, 9 Apr 2022 23:10:11 +0200 Subject: [PATCH] Added a thread to voteGetter so it would interfere with Pinger. Added to do for jonas --- .../dbis/cs108/multiplayer/client/Client.java | 62 ++++++++++++------- .../cs108/multiplayer/helpers/Protocol.java | 2 +- 2 files changed, 42 insertions(+), 22 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java index db6c3eb..27e8a7a 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java @@ -77,30 +77,50 @@ public class Client { * Tells user to enter a position to vote for passenger at that position */ - public void voteGetter(String msg) { - int msgIndex = msg.indexOf('$'); - String position = msg.substring(0, msgIndex);; - msg = msg.substring(msgIndex + 1); - Scanner userInput = new Scanner(System.in); - //TODO(Seraina): implement - System.out.println(msg); - System.out.println("Please enter your vote"); - int vote; - String input = ""; - try { - input = userInput.nextLine(); - vote = Integer.parseInt(input); - LOGGER.info("input is: " + vote); - } catch (Exception e) { - LOGGER.warn(e.getMessage()); - System.out.println("Invalid vote"); - input = String.valueOf(Integer.MAX_VALUE); - } - sendMsgToServer(Protocol.votedFor + "$" + position + "$" + input); - LOGGER.debug("msg to server is: " + Protocol.votedFor + "$" + position + "$" + input); + public void voteGetter(final String msg) { + /*TODO(Jonas): find a way to integrate this with userInput listener, so we can still send the + * position to the server. This way doesnt work, after a game is finished it thinks you still + * want to vote when entering /c msg + */ + new Thread(new Runnable() { + @Override + public void run() { + int msgIndex = msg.indexOf('$'); + String position = msg.substring(0, msgIndex); + String justMsg = msg.substring(msgIndex + 1); + BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in)); + while (socket.isConnected() && !socket.isClosed()) { + try { + if (bfr.ready()) { + System.out.println(justMsg); + System.out.println("Please enter your vote"); + String msgInput = bfr.readLine(); + int vote; + try { + vote = Integer.parseInt(msgInput); + LOGGER.info("input is: " + vote); + } catch (Exception e) { + LOGGER.warn(e.getMessage()); + System.out.println("Invalid vote"); + msgInput = String.valueOf(Integer.MAX_VALUE); + } + sendMsgToServer(Protocol.votedFor + "$" + position + "$" + msgInput); + LOGGER.debug( + "msg to server is: " + Protocol.votedFor + "$" + position + "$" + msgInput); + + Thread.sleep(5); + } + //LOGGER.debug("just checked next line"); + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + } + } + } + }).start(); } + /** * Starts a thread which listens for incoming chat messages / other messages that the user * has to see diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/Protocol.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/Protocol.java index c19a11a..e40e3ff 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/Protocol.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/Protocol.java @@ -98,7 +98,7 @@ public class Protocol { public static final String startANewGame = "STGAM"; /** - * Client informs server that they have voted and delivers this vote in the form of "CVOTE$position" + * Client informs server that they have voted and delivers this vote in the form of "CVOTE$position$vote" */ public static final String votedFor = "CVOTE";