Merge remote-tracking branch 'origin/SerainaSpiellogik' into SerainaSpiellogik
This commit is contained in:
commit
1db4042bc7
@ -77,30 +77,50 @@ public class Client {
|
|||||||
* Tells user to enter a position to vote for passenger at that position
|
* Tells user to enter a position to vote for passenger at that position
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public void voteGetter(String msg) {
|
public void voteGetter(final String msg) {
|
||||||
int msgIndex = msg.indexOf('$');
|
/*TODO(Jonas): find a way to integrate this with userInput listener, so we can still send the
|
||||||
String position = msg.substring(0, msgIndex);;
|
* position to the server. This way doesnt work, after a game is finished it thinks you still
|
||||||
msg = msg.substring(msgIndex + 1);
|
* want to vote when entering /c msg
|
||||||
Scanner userInput = new Scanner(System.in);
|
*/
|
||||||
//TODO(Seraina): implement
|
new Thread(new Runnable() {
|
||||||
System.out.println(msg);
|
@Override
|
||||||
System.out.println("Please enter your vote");
|
public void run() {
|
||||||
int vote;
|
int msgIndex = msg.indexOf('$');
|
||||||
String input = "";
|
String position = msg.substring(0, msgIndex);
|
||||||
try {
|
String justMsg = msg.substring(msgIndex + 1);
|
||||||
input = userInput.nextLine();
|
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
|
||||||
vote = Integer.parseInt(input);
|
while (socket.isConnected() && !socket.isClosed()) {
|
||||||
LOGGER.info("input is: " + vote);
|
try {
|
||||||
} catch (Exception e) {
|
if (bfr.ready()) {
|
||||||
LOGGER.warn(e.getMessage());
|
System.out.println(justMsg);
|
||||||
System.out.println("Invalid vote");
|
System.out.println("Please enter your vote");
|
||||||
input = String.valueOf(Integer.MAX_VALUE);
|
String msgInput = bfr.readLine();
|
||||||
}
|
int vote;
|
||||||
sendMsgToServer(Protocol.votedFor + "$" + position + "$" + input);
|
try {
|
||||||
LOGGER.debug("msg to server is: " + Protocol.votedFor + "$" + position + "$" + input);
|
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
|
* Starts a thread which listens for incoming chat messages / other messages that the user
|
||||||
* has to see
|
* has to see
|
||||||
|
|||||||
@ -98,7 +98,7 @@ public class Protocol {
|
|||||||
public static final String startANewGame = "STGAM";
|
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";
|
public static final String votedFor = "CVOTE";
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,9 @@
|
|||||||
package ch.unibas.dmi.dbis.cs108.multiplayer.server;
|
package ch.unibas.dmi.dbis.cs108.multiplayer.server;
|
||||||
|
|
||||||
import ch.unibas.dmi.dbis.cs108.BudaLogConfig;
|
import ch.unibas.dmi.dbis.cs108.BudaLogConfig;
|
||||||
|
import ch.unibas.dmi.dbis.cs108.gamelogic.Game;
|
||||||
|
import ch.unibas.dmi.dbis.cs108.gamelogic.TrainOverflow;
|
||||||
|
import ch.unibas.dmi.dbis.cs108.gamelogic.VoteHandler;
|
||||||
import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.Protocol;
|
import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.Protocol;
|
||||||
import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.ServerPinger;
|
import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.ServerPinger;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
@ -182,6 +185,44 @@ public class ClientHandler implements Runnable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes a msg of the form position$vote and extracts vote and position from it and saves it
|
||||||
|
* in VoteHandler.getClientVoteData
|
||||||
|
* @param msg the messaged to decode
|
||||||
|
*/
|
||||||
|
public void decodeVote(String msg){
|
||||||
|
int msgIndex = msg.indexOf('$');
|
||||||
|
int vote = Integer.MAX_VALUE;
|
||||||
|
int position = 0;
|
||||||
|
LOGGER.debug("Message is " + msg);
|
||||||
|
try {
|
||||||
|
position = Integer.parseInt(msg.substring(0,msgIndex));
|
||||||
|
vote = Integer.parseInt(msg.substring(msgIndex + 1));
|
||||||
|
LOGGER.debug("Vote is:" + vote);
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOGGER.warn("Invalid vote " + e.getMessage());
|
||||||
|
}
|
||||||
|
LOGGER.debug("Vote is:" + vote);
|
||||||
|
if(vote != Integer.MAX_VALUE) { //gets MAX_VALUE when the vote wasn't valid
|
||||||
|
VoteHandler.getClientVoteData().setVote(position,vote);
|
||||||
|
LOGGER.debug("Player vote: " + vote);
|
||||||
|
VoteHandler.getClientVoteData().setHasVoted(position,true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes a new Game instance and starts its run method in a new thread
|
||||||
|
*/
|
||||||
|
public void startNewGame() {
|
||||||
|
try {
|
||||||
|
Game game = new Game(this,6,1, ClientHandler.getConnectedClients().size());
|
||||||
|
Thread t = new Thread(game);
|
||||||
|
t.start();
|
||||||
|
} catch (TrainOverflow e) {
|
||||||
|
LOGGER.warn(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes & disconnects the client. To be used if a severe connection loss is detected (i.e. if trying to
|
* Removes & disconnects the client. To be used if a severe connection loss is detected (i.e. if trying to
|
||||||
* send / receive a message throws an exception, not just if ping-pong detects a connection loss).
|
* send / receive a message throws an exception, not just if ping-pong detects a connection loss).
|
||||||
|
|||||||
@ -78,34 +78,11 @@ public class JServerProtocolParser {
|
|||||||
case Protocol.votedFor:
|
case Protocol.votedFor:
|
||||||
LOGGER.debug("Made it here");
|
LOGGER.debug("Made it here");
|
||||||
msg = msg.substring(6);
|
msg = msg.substring(6);
|
||||||
int msgIndex = msg.indexOf('$');
|
h.decodeVote(msg);
|
||||||
int vote = Integer.MAX_VALUE;
|
|
||||||
int position = 0;
|
|
||||||
LOGGER.debug("Message is " + msg);
|
|
||||||
try {
|
|
||||||
position = Integer.parseInt(msg.substring(0,msgIndex));
|
|
||||||
vote = Integer.parseInt(msg.substring(msgIndex + 1));
|
|
||||||
LOGGER.debug("Vote is:" + vote);
|
|
||||||
} catch (Exception e) {
|
|
||||||
LOGGER.warn("Invalid vote " + e.getMessage());
|
|
||||||
}
|
|
||||||
LOGGER.debug("Vote is:" + vote);
|
|
||||||
if(vote != Integer.MAX_VALUE) { //gets MAX_VALUE when the vote wasn't valid
|
|
||||||
VoteHandler.getClientVoteData().setVote(position,vote);
|
|
||||||
LOGGER.debug("Player vote: " + vote);
|
|
||||||
VoteHandler.getClientVoteData().setHasVoted(position,true);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case Protocol.startANewGame:
|
case Protocol.startANewGame:
|
||||||
try {
|
h.startNewGame();
|
||||||
|
break;
|
||||||
Game game = new Game(h,6,1, ClientHandler.getConnectedClients().size());
|
|
||||||
Thread t = new Thread(game);
|
|
||||||
t.start();
|
|
||||||
} catch (TrainOverflow e) {
|
|
||||||
LOGGER.warn(e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
System.out.println("Received unknown command");
|
System.out.println("Received unknown command");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user