Problema para iniciar servidor Socket

0 respostas
threadsjavafxjava
Roberto_Oliveira

Bom dia caros amigos,

Estou desenvolvendo um jogo de cartas multiplayer, onde utilizo uma conexão via sockets. Além disso, utilizei também o JavaFX para criar as cenas.
A ideia pra transferência de dados é a seguinte: cada jogador faz seu turno e encaminha as informações via GSON (JSON Google) para o ServerSocket que encaminhará para ambos os jogadores… mais ou menos como um chat.

Servidor:

public class BattleServer extends Thread {

List<PrintWriter> jogadores = new ArrayList<>();

public BattleServer() {
    ServerSocket server;
    try {
        server = new ServerSocket(5000);
        while (true) {
            Socket socket = server.accept();
            if (jogadores.size() < 2) {
                new Thread(new EscutaCliente(socket)).start();
                jogadores.add(new PrintWriter(socket.getOutputStream()));
            }
        }
    } catch (IOException e) {
        Alert dialogo = new Alert(Alert.AlertType.ERROR);
        dialogo.setTitle("INICIANDO SERVIDOR.");
        dialogo.setHeaderText("Erro na Configuração da Rede.");
        dialogo.setContentText("Não foi possível iniciar o servidor.\n" + e);
        dialogo.showAndWait();
    }
}

private void encaminharParaTodos(String texto) {
    for (PrintWriter w : jogadores) {
        try {
            System.out.println(texto);
            w.println(texto);
            w.flush();
        } catch (Exception e) {
        }
    }
}

private class EscutaCliente implements Runnable {

    Scanner leitor;

    public EscutaCliente(Socket socket) {
        try {
            leitor = new Scanner(socket.getInputStream());
        } catch (Exception e) {
        }
    }

    @Override
    public void run() {
        try {
            String texto;
            while ((texto = leitor.nextLine()) != null) {
                // System.out.println(texto);
                encaminharParaTodos(texto);
            }
        } catch (Exception e) {
        }
    }
}

}

Como o BattleServer é uma Thread, preciso dar o “start” em algum lugar, mas não sei exatamente como fazer isso utilizando o JavaFX. Criei um botão no menu chamado Iniciar Servidor, mas ao clickar no mesmo o programa trava completamente.

@FXML
public void handleBtnIniciarServidor() {
    new BattleServer().start();
}

Alguma dica? Agradeço desde já

Criado 14 de novembro de 2017
Respostas 0
Participantes 1