I have a program where users can guess a number. But when a user have guessed the right number, I want to block all the messages from all the clients for 5 seconds.
for(ClientThread clients : clientThreads)
{
clients.SendGetalToServer(message);
clients.sleep(5000);
clients.interrupt();
}
This works with Thread.sleep
but after the 5 seconds the server and all clients received all the messages when I have typed in the 5 seconds of the Thread.sleep
.
How can I fix this ?
I have a program where users can guess a number. But when a user have guessed the right number, I want to block all the messages from all the clients for 5 seconds. I whas trying with Thread.sleep(5000) this is working but after that 5seconds all the messages i have typed in the Thread.sleep period will be send to all the clients.
Below you find my original code. without Thread.sleep method
ServerThread
public class ClientThread extends Thread {
private Socket socket;
private Server server;
private PrintWriter out;
private BufferedReader in;
private Scanner scanner;
private String username = null;
private boolean isloggedIn = false;
public ClientThread(Socket socket,Server server)
{
this.socket = socket;
this.server = server;
}
public Socket socket()
{
return socket;
}
@Override
public void run() {
try {
out = new PrintWriter(socket.getOutputStream());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
scanner = new Scanner(socket.getInputStream());
String line = "";
out.print("Kies een username: ");
out.flush();
while((line = scanner.nextLine()) != null) {
if (!isloggedIn) {
username = line;
isloggedIn = true;
out.println("U heeft " + username + " gekozen");
out.println("kies een getal");
out.flush();
} else
{
int g = Integer.parseInt(line);
if (g == server.getTeradengetal()) {
server.broadcastGetal(username);
System.out.println(line);
server.setTeradengetal();
} else if (g > server.getTeradengetal()) {
out.println("Lower");
out.flush();
System.out.println(line);
} else if (g < server.getTeradengetal()) {
out.println("Higher");
out.flush();
System.out.println(line);
}
}
}
} catch (InterruptedException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
public void SendGetalToServer(String message)
{
sendMessage(message);
}
public void sendMessage(String message)
{
out.println(message + " heeft het getal juist geraden");
out.flush();
}
}
Server
public class Server {
private ServerSocket serverSocket;
private Socket socket;
private List<ClientThread> clientThreads;
private int teradengetal = 10;
private boolean juistgeraden = false;
public Server() throws IOException {
serverSocket = new ServerSocket(6000);
clientThreads = new ArrayList<>();
while(true)
{
socket = serverSocket.accept();
System.out.println("Client connected");
ClientThread clientThread = new ClientThread(socket,this);
clientThread.start();
clientThreads.add(clientThread);
}
}
public void setTeradengetal()
{
this.teradengetal = (int) Math.floor(Math.random() * 10);
}
public int getTeradengetal()
{
return teradengetal;
}
public void broadcastGetal(String message) throws InterruptedException {
for(ClientThread clients : clientThreads)
{
clients.SendGetalToServer(message);
}
}