подсмотрел правильное решение, там сделано через цикл. Я сделал через рекурсию, видно что одну проверку пропустило, одну нет, вообще не пойму что не так
плюс добавление в список и возврат имени совсем сбивает с толку, добавляю же и возвращаю
с одной проверкой разобрался, вместо
if(userName.getData() != null)
должно быть if(!userName.getData().isEmpty)
но почему не добавляет в список, в чем проблема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.*;
public class Server
{
private static Map<String, Connection> connectionMap = new ConcurrentHashMap<>();
private static class Handler extends Thread
{
private Socket socket;
public Handler(Socket socket)
{
this.socket = socket;
}
@Override
public void run()
{
}
private String serverHandshake(Connection connection) throws IOException, ClassNotFoundException
{
connection.send(new Message(MessageType.NAME_REQUEST, "Введите ваше имя: "));
Message userName = connection.receive();
if(userName.getType() == MessageType.USER_NAME)
{
if(userName.getData() != null)
{
for(String s: connectionMap.keySet())
if(s.equals(userName.getData())) serverHandshake(connection);
connectionMap.put(userName.getData(), connection);
connection.send(new Message(MessageType.NAME_ACCEPTED));
}
else serverHandshake(connection);
}
else serverHandshake(connection);
return userName.getData();
}
}
public static void sendBroadcastMessage(Message message)
{
try
{
for(Connection connection: connectionMap.values())
{
connection.send(message);
}
} catch (IOException e)
{
ConsoleHelper.writeMessage("Не удалось отправить сообщение");
}
}
public static void main(String[] args)
{
int port = ConsoleHelper.readInt();
try(ServerSocket server = new ServerSocket(port);)
{
ConsoleHelper.writeMessage("Server starts work");
while(!server.isClosed())
{
new Handler(server.accept()).start();
}
} catch (IOException e)
{
e.printStackTrace();
}
}
}