Mostrar clientes online (Chat Java RMI)

Olá comunidade, preciso mostrar os clientes online em um chat em Java RMI.

O chat está funcionando normalmente, tentei criar um ArrayList para armazenar os nomes dos clientes porém não deu certo… Mostra apenas o nome do usuário de cada cliente separado, não funciona na thread. Alguém teria uma ideia de como fazer?

  • Pra mostrar online, digita-se !online

O código do cliente está assim:

import java.rmi.*;
import javax.swing.*;
import java.util.Scanner;
import java.lang.Thread.*;
import java.util.ArrayList;
import java.rmi.RemoteException;

public class Cliente {

    public static void main(String args[]) {
        try {
            final ServidorChat chat = (ServidorChat) Naming.lookup("rmi://localhost:1098/ServidorChat");

            String nome;
            String msg = "";
            Scanner scanner = new Scanner(System.in);

            System.out.println("* Digite seu nick: ");

            nome = scanner.nextLine();
            
            ArrayList<String> usr_online = new ArrayList();
            
            usr_online.add(nome);

            System.out.println("* Seja bem vindo(a) " + nome);
            System.out.println("* Para sair do chat digite '!sair'");

            Thread thread = new Thread(new Runnable() {
                int cont = chat.lerMensagem().size();

                @Override
                public void run() {
                    try {
                        while (true) {
                            if (chat.lerMensagem().size() > cont) {
                                System.out.println(chat.lerMensagem().get(chat.lerMensagem().size() - 1));
                                cont++;
                            }
                        }
                    } catch (RemoteException e) {
                        e.printStackTrace();
                    }
                }
            });
            thread.start();
            chat.enviarMensagem("* "+nome + " entrou na sala");
            while (!"sair".equals(msg)) {
//System.out.println(nome+": ");
                if(msg.equals("!online")){
                    for(String user : usr_online){
                        System.out.println(user);
                    }
                }
                msg = scanner.nextLine();

                chat.enviarMensagem(">> "+nome + ": " + msg);
// System.out.println(chat.lerMensagem().get(cont));
            }
            //chat.enviarMensagem("* "+nome + " saiu na sala");
            System.exit(0);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Quando jogo no Arraylist ele só pega um usuario por vez, acho que não estou conseguindo gravar na thread

Recomendo ler…

https://www.caelum.com.br/apostila-java-orientacao-objetos/apendice-programacao-concorrente-e-threads/

https://www.caelum.com.br/apostila-java-orientacao-objetos/apendice-sockets/#soluo-do-sistema-de-chat

Apesar de usar sockets, a lógica do chat vc pode usar…