I used the if else to make sure that if the type is not TEXT, an error is displayed.
package com.codegym.task.task30.task3008;
import javax.crypto.MacSpi;
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) {
for (Connection c : connectionMap.values()) {
try {
c.send(message);
} catch (IOException e) {
System.out.println("error");
}
}
}
private static class Handler extends Thread {
Socket socket;
public Handler (Socket socket) {
this.socket = socket;
}
private String serverHandshake(Connection connection) throws IOException, ClassNotFoundException {
String name;
while (true) {
connection.send(new Message(MessageType.NAME_REQUEST));
Message received = connection.receive();
if (received.getType().equals(MessageType.USER_NAME)) {
name = received.getData();
if (!name.isEmpty() && !connectionMap.containsKey(name)) {
connectionMap.put(name, connection);
connection.send(new Message(MessageType.NAME_ACCEPTED));
return name;
}
}
}
}
private void notifyUsers(Connection connection, String userName) throws IOException {
for (String name : connectionMap.keySet()) {
if (!name.equals(userName)) {
connection.send(new Message(MessageType.USER_ADDED, name));
}
}
}
private void serverMainLoop(Connection connection, String userName) throws IOException, ClassNotFoundException {
while (true) {
try {
Message received = connection.receive();
if (received.getType().equals(MessageType.TEXT)) {
String m = userName + ": " + received.getData();
sendBroadcastMessage(new Message(MessageType.TEXT, m));
} else {
String error = "not text error";
System.out.println(error);
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
}
public static void main(String[] args) throws IOException {
int port = ConsoleHelper.readInt();
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Server is running");
Socket socket;
try {
while (true) {
socket = serverSocket.accept();
Handler handler = new Handler(socket);
handler.start();
}
} catch (Exception e) {
System.out.println(e.getMessage());
serverSocket.close();
}
}
}