I couldn't seem to pass the "The name request should repeated until the message type of the response is equal to MessageType.USER_NAME." validation.
Can someone tell me why?
package com.codegym.task.task30.task3008;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class Server {
private static Map<String, Connection> connectionMap = new ConcurrentHashMap<>();
public static void main(String[] args) throws IOException {
int port = ConsoleHelper.readInt();
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(port);
System.out.println("Connected: " + serverSocket);
while (true) {
Handler handler = new Handler(serverSocket.accept());
handler.start();
}
}
catch (IOException e) {
e.printStackTrace();
if (serverSocket != null) serverSocket.close();;
}
}
public static void sendBroadcastMessage(Message message){
connectionMap.values().forEach(connection -> {
try {
connection.send(message);
}
catch (IOException e) {
e.printStackTrace();
}
});
}
private static class Handler extends Thread {
Socket socket;
public Handler(Socket socket) {
this.socket = socket;
}
private String serverHandshake(Connection connection) throws IOException,
ClassNotFoundException {
String userName;
MessageType messageType;
do {
connection.send(new Message(MessageType.NAME_REQUEST));
Message response = connection.receive();
messageType = response.getType();
userName = response.getData();
} while (!messageType.equals(MessageType.USER_NAME) || userName == null || userName.isEmpty() || connectionMap.containsKey(userName));
connectionMap.put(userName, connection);
return userName;
}
}
}