Я не могу понять, как уведомить мой класс сервера о том, что соединение было потеряно. Мой код сервера:Не удается правильно отслеживать подключенных клиентов java
public class Server {
static int port = 4444;
static boolean listening = true;
static ArrayList<Thread>Clients = new ArrayList<Thread>();
static MatchMaker arena;
public static void main(String[] args) {
Initialize();
Thread startConnections = new Thread(run());
startConnections.start();
}
private static Runnable run(){
System.out.println("(" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + ") Started listening on port: " + port);
try(ServerSocket socket = new ServerSocket(port)){
while(listening){
if(Clients.size() <= 4){
Socket clientSocket = socket.accept();
MultiThread connection = new MultiThread(clientSocket, arena,);
Clients.add(connection);
System.out.println("Client connected from " + clientSocket.getRemoteSocketAddress() + " Assigned ID: " + connection.getId());
System.out.println("Currently connected clients(" + Clients.size() + "): ");
for(int i = 0; i < Clients.size(); i++)
System.out.println(" - " + Clients.get(i).getId());
connection.start();
}
}
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
private static void Initialize(){
arena = new MatchMaker();
}
}
Проблема здесь состоит в том, что, поскольку этот класс отслеживает подключенных клиентов, я хочу, чтобы это заметить, когда клиент потерял соединение. Класс MultiThread уже имеет функциональный способ обнаружения клиентов, потерявших соединение, однако я не знаю, как передать эту информацию обратно в класс Server. Я пробовал передать класс сервера MultiThread в качестве параметра, но он сказал, что я не могу использовать «это» статическим образом.
Btw, в 'main' ваш код не открыт или прорвался. Вы можете просто вызвать 'run()' вместо этого кода. –
И нет кода в 'Server', который должен обрабатывать уведомления об отключении. –