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á