Помогите пожалуйста, запутался.
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 {
static private Map<String, Connection> connectionMap = new ConcurrentHashMap<>(); //где ключом будет имя клиента,
// а значением - соединение с ним.
private static class Handler extends Thread {
Socket socket;
public Handler(Socket socket) {
this.socket = socket;
}
//знакомства сервера с клиентом)
private String serverHandshake(Connection connection) throws IOException, ClassNotFoundException {
Message answer;
do {
connection.send(new Message(MessageType.NAME_REQUEST));
answer = connection.receive();
if (answer.getType() == MessageType.USER_NAME ) {
if (answer.getData().trim().length() != 0) {
if (!connectionMap.containsKey(answer.getData())) {
connectionMap.put(answer.getData(), connection);
connection.send(new Message(MessageType.NAME_ACCEPTED));
return answer.getData();
}
}
}
}
while (true) ;
}
// должен отправлять сообщение message всем соединениям из connectionMap.
public static void sendBroadcastMessage(Message message) {
for (Connection conClient : connectionMap.values()) {
try {
conClient.send(message);
} catch (IOException e) {
e.printStackTrace();
System.out.println("сообщение не было отправленно");
}
}
}
public static void main(String[] args) throws IOException {
ConsoleHelper consoleHelper = new ConsoleHelper(); //создаём объект для чтения с консоли
int p = consoleHelper.readInt(); // читаем с консоли
Socket client = null; //класс реализует клиентский сокет.
try (ServerSocket serverSocket = new ServerSocket(p)) { //класс реализует серверный сокет,
// который ожидает запросы, приходящие от клиентов по сети, и может отправлять ответ.
System.out.print("Connection accepted.");
while (true) {
client = serverSocket.accept(); //Ожидание подключения клиента
Handler handler = new Handler(client); //Handler может использоваться для планирования выполнения
// кода в некоторый момент в будущем. Также класс может использоваться для передачи кода,
// который должен выполняться в другом программном потоке.
handler.start();
}
} catch (Exception e) {
System.out.println(e.getMessage());
client.close(); }
}
private void notifyUsers(Connection connection, String userName) throws IOException {
for (String key : connectionMap.keySet()) {
try {
if (!key.equals(userName)){connection.send(new Message(MessageType.USER_ADDED, key));}
} catch (Exception e) {}
}
}
private void serverMainLoop(Connection connection, String userName) throws IOException, ClassNotFoundException {
while (true) {
Message mem = connection.receive();
if (mem.getType() == MessageType.TEXT){
String text = userName + ": " + mem.getData();
sendBroadcastMessage(new Message(MessageType.TEXT, text));
}
else {ConsoleHelper.writeMessage("Это не текст");}
}
}
}
}