Где тут баг?
АВТОРАМ КУРСА: Не понятно, как ваш валидатор работает. Кроме того, он может ругаться не на те пункты, на которые надо. Сделали бы детальный вывод хода проверки: что подавалось на вход, что ожидалось в результате и что выдал тестируемый код. Иначе много времени уходит на битву с валидатором. Время жалко.
package com.javarush.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 sendBroadcastMessage(Message message){
try {
for (Map.Entry<String, Connection> kv:connectionMap.entrySet() ) {
Connection connection = kv.getValue();
connection.send(message);
}
}catch (IOException e){
System.out.println("Не удалось отправить сообщение");
}
}
private static class Handler extends Thread {
private static Socket socket;
public Handler(Socket socket) {
this.socket = socket;
}
private String serverHandshake(Connection connection) throws IOException, ClassNotFoundException {
while (true){
connection.send(new Message(MessageType.NAME_REQUEST));
Message answer = connection.receive();
if (answer.getType() != MessageType.USER_NAME) continue;
String userName = answer.getData();
if (userName == null || userName.isEmpty()) continue;
if (connectionMap.containsKey(userName)) continue;
connectionMap.put(userName, connection);
connection.send(new Message(MessageType.NAME_ACCEPTED));
return userName;
}
}
}
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(ConsoleHelper.readInt());
System.out.println("Cервер запущен");
while (true){
Socket clientSocket = serverSocket.accept();
new Handler(clientSocket).start();
}
}catch (IOException e){
e.printStackTrace();
if (serverSocket != null)
serverSocket.close();
}
}
}