/** * setzt, dass der Client bereit zum Spielen ist. Wenn alle Clients bereit zum Spielen sind, * wird allen ein Startsignal geschickt * * @param zeile Daten des Clients */ private void behandleBereitsein(String zeile) { bereit = true; int id = Integer.parseInt(zeile.substring(zeile.indexOf(";") + 1)); MultiplayerSpiel spiel = getSpielById(id); spiel.addSpieler(spieler); boolean alleBereit = true; for (MultiplayerSpieler spieler : spiel.getAlleSpieler()) for (ArduinoRacerConnectionThread thread : threads) if (spieler.getId() == thread.spieler.getId()) alleBereit &= thread.bereit; System.out.println("ALLEBEREIT?" + alleBereit); if (alleBereit) { spiele.remove(spiel); try { sendeVerfuegbareSpieleAnAlle(); } catch (Exception e1) { e1.printStackTrace(); } for (MultiplayerSpieler spieler : spiel.getAlleSpieler()) for (ArduinoRacerConnectionThread thread : threads) if (spieler.getId() == thread.spieler.getId()) { try { thread.out.writeObject(SPIEL_START); System.out.println(SPIEL_START); thread.out.flush(); } catch (Exception e) { e.printStackTrace(); } } } }
/** * löscht das Spiel, das den übergebenen Daten entspricht, jedoch nur, wenn der Client, der das * Spiel löschen will das Spiel erstellt hat. Nachdem das Spiel gelöscht wird, werden alle * Spiele an alle Clients geschickt * * @param zeile Daten, des zu löschenden Spiels */ private void behandleSpielLoeschen(String zeile) { zeile = zeile.substring(zeile.indexOf(";") + 1); MultiplayerSpiel spiel = getSpielById(Integer.parseInt(zeile)); if (spiel.getSpielersteller().getId() == spieler.getId()) { spiele.remove(spiel); sendeVerfuegbareSpieleAnAlle(); } }
/** * behandelt einen Beitritt des Clients zu ein Spiel. Dabei werden die übergebenen Daten zu * einem vorhanden Spiel zugewiesen und bei einem erfolglosen Beitritt eine dementsprechende * Meldung geschickt. Ansonsten wir eine Beitrittsbestätigung geschickt. * * @param zeile Daten des Clients * @throws IOException Wenn beim Senden ein Fehler auftritt */ private void behandleBeitritt(String zeile) throws IOException { System.out.println("behandleBeitritt"); int id = Integer.parseInt(zeile.substring(zeile.indexOf(";") + 1)); MultiplayerSpiel spiel = getSpielById(id); String grund = null; if (spiel == null) grund = "Teilnahme am Spiel fehlgeschlagen"; else if (spiel.hasSpieler(spieler.getId())) grund = "Spieler mit Ihrer ID ist bereits im Spiel vorhanden"; else if (spiel.hasAutofarbe(spieler.getAuto().getFarbe())) grund = "Spieler mit Ihrem Auto ist bereits im Spiel vorhanden"; else if (spiel.hasSpielername(spieler.getName())) grund = "Spieler mit Ihrem Name ist bereits im Spiel vorhanden"; else { spiel.addSpieler(spieler); out.writeObject(BEITRITTS_BESTAETIGUNG + ";" + id); out.flush(); sendeVerfuegbareSpieleAnAlle(); if (spiel.getGesamtSpieler() == spiel.getBegetetreteneSpieler()) { for (MultiplayerSpieler spieler : spiel.getSpieler()) for (ArduinoRacerConnectionThread thread : threads) if (spieler.getId() == thread.spieler.getId()) { thread.out.writeObject(SPIEL_OK); System.out.println("SPIEL_PK"); thread.out.flush(); } System.out.println(spiel.getSpielersteller().getId() + threads.toString()); for (ArduinoRacerConnectionThread thread : threads) if (spiel.getSpielersteller().getId() == thread.spieler.getId()) { thread.out.writeObject(SPIEL_OK); System.out.println("SPIEL_OK TO SERVER"); } } } if (grund != null) { out.writeObject(BEITRITTS_ABSAGE + ";" + id + ";" + grund); out.flush(); } }
/** * fügt ein neues Spiel zu allen verfügbaren Spielen nach den übergebenen Daten hinzu und weißt * diesem eine ID zu. Anschließend werden alle Spiele an alle Clients geschickt * * @param zeile Daten, nach denen das Spiel erstellt werden soll */ private void behandleNeuesSpiel(String zeile) { zeile = zeile.substring(zeile.indexOf(";") + 1); MultiplayerSpiel spiel = new MultiplayerSpiel(); spiel.setAnzahlRunden(Integer.parseInt(zeile.substring(0, zeile.indexOf(";")))); zeile = zeile.substring(zeile.indexOf(";") + 1); spiel.setGesamtSpieler(Integer.parseInt(zeile.substring(0, zeile.indexOf(";")))); zeile = zeile.substring(zeile.indexOf(";") + 1); spiel.setSpielname(zeile); spiel.setSpielersteller(spieler); spiel.generateHost(); System.out.println(spiel.getHost()); synchronized (this) { spiel.setId(currentID++); } spiele.add(spiel); System.out.println(spiel); sendeVerfuegbareSpieleAnAlle(); }
/** * liefert das MultiplayerSpiel mit der übergebenen ID zurück * * @param id des gesuchten Multiplayerspiels * @return Multiplayerspiel, der übergebenen id, null wenn die id nicht gefunden wird */ public MultiplayerSpiel getSpielById(int id) { MultiplayerSpiel ret = null; for (MultiplayerSpiel spiel : spiele) if (spiel.getId() == id) ret = spiel; return ret; }
/** * löscht den Spieler vom übergeben Spiel und sendet alle Spiele an alle. * * @param zeile Daten, des Spiels, bei dem der Spieler gelöscht werden soll */ private void behandleRuecktritt(String zeile) { MultiplayerSpiel spiel = getSpielById(Integer.parseInt(zeile.substring(zeile.indexOf(";") + 1))); spiel.removeSpieler(spieler.getId()); sendeVerfuegbareSpieleAnAlle(); }