jeudi 23 avril 2015
List Deserialisierung entfernt Objekte
Posted on 19:51 by verona
Hey Leute,
ich programmiere zurzeit zum Spaß ein Netzwerkspiel für Doppelkopf und bin auf einen Fehler gestoßen, der mich ratlos macht. Ich habe, bevor das Spiel startet, eine Lobby, zu der Spieler sich verbinden können.
Nachdem ein Spieler sich verbunden hat, wird an alle Spieler eine Nachricht geschickt, in der Informationen zur Lobby enthalten sind, welche in der GUI angezeigt werden sollen(zur Zeit nur Spielerobjekte in einer Liste).
Beim Senden dieser Nachricht hat diese Liste die richtige Größe, nur wenn diese Nachricht bei den Spieler ankommt, fehlen dort alle Spielerobjekte, welche sich nach dem eigenen Verbinden verbunden haben.
Als Beispiel:
Spieler 1 erstellt den Server
Spieler 2 verbindet sich und sieht in der Lobby Spieler 1 und 2
Spieler 3 verbindet sich und sieht in der Lobby Spieler 1,2 und 3
Spieler 2 sieht weiterhin nur Spieler 1 und 2 in der Lobby, Spieler 1 und 3 sehen alles
Ich habe zum Testen bereits einen Integer mitgeschickt, der die Listengröße speichert und dieser hat auch beim Spieler 2 den Wert 3, die Liste allerdings nur 2 Objekte.
Die Nachrichten werden mit ObjectOutputStream und ObjectInputStream von einem Socket/ServerSocket gesendet/empfangen
Hat jemand von euch schonmal solch ein Problem gehabt und kann mir helfen?
Hier die einzelnen Klassen und Methoden:
ExternalEvent sind alle Nachrichten, welche übers Netzwerk verschickt werden. Ein EventBus mit Consumer wartet auf diese Events und sendet sie zu allen Spielern
Senden der Nachricht
Empfangen der Nachricht
Genau beim Empfangen der Nachricht treten die Probleme auf und die beiden Attribute sind wie in dem Beispiel teilweise unterschiedlich groß.
Wäre für jede Hilfe dankbar! :)
Viele Grüße,
Crashkurs
ich programmiere zurzeit zum Spaß ein Netzwerkspiel für Doppelkopf und bin auf einen Fehler gestoßen, der mich ratlos macht. Ich habe, bevor das Spiel startet, eine Lobby, zu der Spieler sich verbinden können.
Nachdem ein Spieler sich verbunden hat, wird an alle Spieler eine Nachricht geschickt, in der Informationen zur Lobby enthalten sind, welche in der GUI angezeigt werden sollen(zur Zeit nur Spielerobjekte in einer Liste).
Beim Senden dieser Nachricht hat diese Liste die richtige Größe, nur wenn diese Nachricht bei den Spieler ankommt, fehlen dort alle Spielerobjekte, welche sich nach dem eigenen Verbinden verbunden haben.
Als Beispiel:
Spieler 1 erstellt den Server
Spieler 2 verbindet sich und sieht in der Lobby Spieler 1 und 2
Spieler 3 verbindet sich und sieht in der Lobby Spieler 1,2 und 3
Spieler 2 sieht weiterhin nur Spieler 1 und 2 in der Lobby, Spieler 1 und 3 sehen alles
Ich habe zum Testen bereits einen Integer mitgeschickt, der die Listengröße speichert und dieser hat auch beim Spieler 2 den Wert 3, die Liste allerdings nur 2 Objekte.
Die Nachrichten werden mit ObjectOutputStream und ObjectInputStream von einem Socket/ServerSocket gesendet/empfangen
Hat jemand von euch schonmal solch ein Problem gehabt und kann mir helfen?
Hier die einzelnen Klassen und Methoden:
Java Code:
Java Code:
-
-
private static final long serialVersionUID = -6163438352827657353L;
-
-
}
Java Code:
-
-
private static final long serialVersionUID = -4887168039027506598L;
-
-
private List<Player> players;
-
-
public Table() {
-
players = new LinkedList<Player>();
-
}
-
-
public List<Player> getPlayers() {
-
return players;
-
}
-
-
public void addPlayer(Player player) {
-
if(!players.contains(player))
-
{
-
players.add(player);
-
}
-
}
-
}
Java Code:
-
public class GameController extends AbstractController {
-
-
private Table table;
-
-
public GameController() {
-
table = new Table();
-
}
-
-
private void playerWantsToJoinLobby(Player player)
-
{
-
table.addPlayer(player);
-
UpdateLobbyEvent ev1 = new UpdateLobbyEvent(table.getPlayers());
-
getEventBus().addDokoEvent(ev1);
-
}
-
}
ExternalEvent sind alle Nachrichten, welche übers Netzwerk verschickt werden. Ein EventBus mit Consumer wartet auf diese Events und sendet sie zu allen Spielern
Java Code:
-
public class UpdateLobbyEvent extends ExternalEvent {
-
-
private static final long serialVersionUID = -4286761159555969836L;
-
-
private final List<Player> players;
-
-
private int playerSize;
-
-
public UpdateLobbyEvent(List<Player> players)
-
{
-
this.players = players;
-
this.playerSize = players.size();
-
}
-
-
public List<Player> getPlayers() {
-
return players;
-
}
-
-
public int getPlayerSize() {
-
return playerSize;
-
}
-
}
Senden der Nachricht
Java Code:
-
public void sendMessage(ExternalEvent event) {
-
try {
-
output.writeObject(event);
-
e.printStackTrace();
-
}
-
}
Empfangen der Nachricht
Java Code:
-
while ((object = input.readObject()) != null) {
-
if (object instanceof ExternalEvent) {
-
ExternalEvent event = (ExternalEvent) object;
-
if(event instanceof UpdateLobbyEvent)
-
{
-
}
Genau beim Empfangen der Nachricht treten die Probleme auf und die beiden Attribute sind wie in dem Beispiel teilweise unterschiedlich groß.
Wäre für jede Hilfe dankbar! :)
Viele Grüße,
Crashkurs
List Deserialisierung entfernt Objekte
Categories: List Deserialisierung entfernt Objekte
Inscription à :
Publier les commentaires (Atom)
0 commentaires:
Enregistrer un commentaire