Валидатор жалуется на processIncomingMessage. Что не так? В IDE код работает.
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<>();
private static class Handler extends Thread {
private Socket socket;
public Handler(Socket socket) {
this.socket = socket;
}
private String serverHandshake(Connection connection) throws IOException, ClassNotFoundException {
StringBuffer connectionName = new StringBuffer();
connection.send(new Message(MessageType.NAME_REQUEST, "Your name is...?"));
Message userMessage;
while (true) {
userMessage = connection.receive();
if (userMessage.getType().equals(MessageType.USER_NAME)
&& !userMessage.getData().isEmpty()
&& !userMessage.getData().equals(null)
&& !connectionMap.containsKey(userMessage.getData())) {
connectionName.append(userMessage.getData());
connectionMap.put(connectionName.toString(), connection);
connection.send(new Message(MessageType.NAME_ACCEPTED, "Your name accepted."));
break;
}else {
connection.send(new Message(MessageType.NAME_REQUEST, "Your name is...?"));
continue;
}
}
return connectionName.toString();
}
private void notifyUsers(Connection connection, String userName) throws IOException{
for (Map.Entry<String, Connection> buffMap : connectionMap.entrySet()) {
if(!buffMap.getKey().equals(userName)) {
connection.send((new Message(MessageType.USER_ADDED, buffMap.getKey())));
}
}
}
private void serverMainLoop(Connection connection, String userName) throws ClassNotFoundException, IOException{
while (true) {
Message message=connection.receive();
if(message.getType()==MessageType.TEXT) {
String m=userName+": "+message.getData();
Message me=new Message(MessageType.TEXT, m);
Server.sendBroadcastMessage(me);
}else {
ConsoleHelper.writeMessage("Error.");
}
}
}
public void run() {
String userName=null;
ConsoleHelper.writeMessage("Connedtion with "+socket.getRemoteSocketAddress());
try(Connection connection=new Connection(socket)) {
userName=serverHandshake(connection);
notifyUsers(connection, userName);
sendBroadcastMessage(new Message(MessageType.USER_ADDED, userName));
serverMainLoop(connection, userName);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
System.out.println("Error!");
} finally{
if(userName!=null) {
connectionMap.remove(userName);
sendBroadcastMessage(new Message(MessageType.USER_REMOVED,userName));
}}
ConsoleHelper.writeMessage("Conncection closed.");
}
}
public static void sendBroadcastMessage(Message message) {
for (Map.Entry<String, Connection> buffMap : connectionMap.entrySet()) {
try {
buffMap.getValue().send(message);
} catch (IOException e) {
System.out.println("Fail: " + e.getStackTrace());
}
}
}
public static void main(String... args) throws IOException {
try (ServerSocket serverSocket = new ServerSocket(ConsoleHelper.readInt())) {
System.out.println("Server started.");
while (true) {
new Server.Handler(serverSocket.accept()).start();
}
} catch (Exception e) {
System.out.println("Fail: " + e.getStackTrace());
}
}
}