Hello I am creating a server for the turn based game. I achieved connecting people to the server in the separated threads and they can send messages to server and recieve answer from server. However, now I need to connect two people to one room and make them communicate with each other (I do not know if through server or just somehow connect them with each other. These people connect to server and can communicate with it when every of them has one clientHandler. However, when I make a clientHandler which handles two sockets it does not work. Does somebody know how to make handler (room on a server) in which the pair of clients could send message to each other?
public void handlePVPGame(Socket playerWhite, Socket playerBlack, int pointerId) throws IOException {
int firstPlayerId = pointerId;
pointerId +=1;
int secondPlayerId = pointerId;
ClientHandler clientHandlerWhite = new ClientHandler(playerWhite);
ClientHandler clientHandlerBlack = new ClientHandler(playerBlack);
new Thread(clientHandlerWhite).start();
new Thread(clientHandlerBlack).start();
// This does not work
// TwoClientsHandler twoClientsHandler = new TwoClientsHandler(playerWhite, playerBlack);
// new Thread(twoClientsHandler).start();
// ClientHandlerClass
public class ClientHandler implements Runnable {
private final Socket clientSocket;
private PrintWriter printWriter;
private BufferedReader bufferedReader;
private InputStreamReader inputStreamReader;
public ClientHandler(Socket socket)
{
this.clientSocket = socket;
}
@Override
public void run() {
try {
printWriter = new PrintWriter(clientSocket.getOutputStream());
inputStreamReader = new InputStreamReader(clientSocket.getInputStream());
bufferedReader = new BufferedReader(inputStreamReader);
String receivedMessage;
while ((receivedMessage = bufferedReader.readLine())!= null){
System.out.printf(
" Sent from the client: %s\n",
receivedMessage);
printWriter.println("Welcome to server");
printWriter.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
// Class which does not work
public class TwoClientsHandler implements Runnable{
private final Socket playerWhite;
private PrintWriter printWriterWhite;
private InputStreamReader inputStreamReaderWhite;
private BufferedReader bufferedReaderWhite;
private final Socket playerBlack;
private PrintWriter printWriterBlack;
private InputStreamReader inputStreamReaderBlack;
private BufferedReader bufferedReaderBlack;
public TwoClientsHandler(Socket playerWhite,Socket playerBlack) {
this.playerWhite = playerWhite;
this.playerBlack = playerBlack;
}
@Override
public void run() {
try {
printWriterWhite = new PrintWriter(playerWhite.getOutputStream());
inputStreamReaderWhite = new InputStreamReader(playerWhite.getInputStream());
bufferedReaderWhite = new BufferedReader(inputStreamReaderWhite);
printWriterBlack = new PrintWriter(playerBlack.getOutputStream());
inputStreamReaderWhite = new InputStreamReader(playerBlack.getInputStream());
bufferedReaderWhite = new BufferedReader(inputStreamReaderWhite);
String receivedMessage;
while ((receivedMessage = bufferedReaderWhite.readLine())!= null){
System.out.printf(
" Sent from the client: %s\n",
receivedMessage);
printWriterWhite.println("Welcome to server");
printWriterWhite.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}