Jump to content
Sign in to follow this  
_rapt0r_

Ajuda com arraylist

Recommended Posts

_rapt0r_

Boas pessoal, sou novo no mundo do java e estou a tentar fazer um jogo p2p em java, mas tou aki com um pequeno problema.. a minha classe UDPRecebe recebe uma msg com o nome dos utilizadores online, e eu queria passar o valor dessa mensagem numa arraylist para um metodo noutra classe chamado listaUtilizadores. O problema é que o resultado chega como null. Alguem me pode ajudar?

public class UDPRecebe implements Runnable {

    static final int PORTO = 3110;
    static final int MAX_TAMANHO_MSG = 1024;
    //public static HashMap<String , String[]> info = new HashMap<>();
   // ArrayList<String> nickList = new ArrayList<>();
    public String[] nickList;
   Jogador joga;
    public UDPRecebe(Jogador joga) {
        this.joga = joga;
        
        
    }
   
    

    public void run() {
        
        try {
            System.out.println("Estou à escuta na porta " + PORTO);
            //criar um buffer de bytes para colocar o conteudo do datagrama
            byte[] buffer = new byte[MAX_TAMANHO_MSG];
            String msg;

            // Criar um socket UDP para receber datagramas no porto indicado
            DatagramSocket recebe = new DatagramSocket(PORTO);

            while (true) {
                //Criar um objecto DatagramPacket chamado packet para receber uma mensagem
                DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

                // Esperar que chegue algum datagrama
                recebe.receive(packet);

                //Apresentar ao utilizador de que endereco e porto remotos chegou este datagrama
                System.out.println("O datagrama chegou do seguinte par endereço : porto " + packet.getSocketAddress());

                // Converter o conteudo do datagrama para uma string e apresenta-lo
                msg = new String(buffer, 0, packet.getLength());
                String ip = packet.getAddress().getHostAddress();
                processar(ip, msg);
               

            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public void processar(String ip, String msg) {
       
        String[] detalhes = msg.split(" ");          
        String [] nick = detalhes[1].split(";");
        String nome = detalhes[0];
        nickList = nick;
       
         
        String estado = detalhes[2];
        //Em caso de um pedido PLAYER_Info gera uma resposta PLAYER_INFO_REPLY.
        switch (detalhes[0]) {
            case "PLAYER_INFO":
                try {
                    
                    UDPEnvia.enviaMsg(ip, "PLAYER_INFO_REPLY "+joga.getName()+";"+joga.getMyState());
                  // info.put(ip, new String[](nome, estado));
                  
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            
          
        }
       
        }

    }

E precisava de passar o ip, nome e estado para esta classe

public class ServidorPresencas {

    private String[] utilizadoresOnline;
    Jogador joga;

    UDPRecebe recebe = new UDPRecebe(joga);
    public String[] nickList = recebe.nickList;

    public ServidorPresencas(Jogador joga) {
        this.joga = joga;
        
        
    }

    public void temporizador() {

        Timer timer = new Timer();
        int startingTime = 0;
        int delayTime = 30000;
        timer.schedule(new TimerTask() {

            @Override
            public void run() {
                ligarServidor();
                getInfo();
            }
        }, startingTime, delayTime);

    }

    private void ligarServidor() {
        try {
            URL servPresencas = new URL("http://193.137.8.61/heartbeat/heartbeat.svc/show?ip=" + InetAddress.getLocalHost().getHostAddress());
            URLConnection yc = servPresencas.openConnection();
            try (BufferedReader in = new BufferedReader(
                            new InputStreamReader(
                            yc.getInputStream()))) {
                String inputLine;

                while ((inputLine = in.readLine()) != null) {
                    utilizadoresOnline = inputLine.split(";");
                }

                listarUtilizadores();
            }
        } catch (MalformedURLException ex) {
            System.out.println(ex);
        } catch (IOException ex) {
            System.out.println(ex);
        }
    }

    private void listarUtilizadores() {
        for (int i = 0; i < utilizadoresOnline.length; i++) {
            System.out.println(nickList);
            System.out.println("o ip: " + utilizadoresOnline[i] +"");
        }
    }

    public void getInfo() {
        // String nome = joga.getName();
        for (String str : utilizadoresOnline) {
            try {
                UDPEnvia.enviaMsg(str, "PLAYER_INFO " + joga.getName() +"; livre");
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    
    try {
                     synchronized(this){
                     
                    
                         wait(30000);
                    
                    }
                } catch (InterruptedException ex) {
                    Logger.getLogger(ServidorPresencas.class.getName()).log(Level.SEVERE, null, ex);
                }
}
}

e precisava de passar um array com o ip, estado e nome do utilizador para o metodo listarUtilizador.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.