@Override protected void onExit() { if (isHost) { server.stop(); } else { client.disconnect(); } }
private void initNetworking() { if (isHost) { server.addParser(RequestMessage.class, data -> requestQueue.offer(data)); server.addParser(String.class, data -> isConnected = true); server.start(); } else { client.addParser(DataMessage.class, data -> updateQueue.offer(data)); try { client.connect(); client.send("Hi"); } catch (Exception e) { log.severe(FXGLLogger.errorTraceAsString(e)); exit(); } } }
@Override protected void onUpdate(long now) { if (isHost) { if (!isConnected) return; RequestMessage data = requestQueue.poll(); if (data != null) { for (KeyCode key : data.keys) { if (key == KeyCode.W) { player2.translate(0, -5); } else if (key == KeyCode.S) { player2.translate(0, 5); } else if (key == KeyCode.A) { player2.translate(-5, 0); } else if (key == KeyCode.D) { player2.translate(5, 0); } else if (key == KeyCode.ESCAPE) { exit(); } } } try { server.send( new DataMessage( player1.getTranslateX(), player1.getTranslateY(), player2.getTranslateX(), player2.getTranslateY())); } catch (Exception e) { log.warning("Failed to send message: " + e.getMessage()); exit(); } } else { DataMessage data = updateQueue.poll(); if (data != null) { player1.setPosition(data.x1, data.y1); player2.setPosition(data.x2, data.y2); } KeyCode[] codes = keys.keySet() .stream() .filter(k -> keys.get(k)) .collect(Collectors.toList()) .toArray(new KeyCode[0]); try { client.send(new RequestMessage(codes)); if (keys.get(KeyCode.ESCAPE)) { exit(); } } catch (Exception e) { log.warning("Failed to send messsage: " + e.getMessage()); exit(); } keys.forEach((key, value) -> keys.put(key, false)); } }