Closed fabianHAW closed 6 years ago
Die Kommunikation über die Broadcasts scheint zu funktionieren. Spieler beschießen sich gegenseitig und suchen ihr nächstes Target aus... allerdings kommt es nach kurzer Zeit zu einem Haufen von Fehlermeldungen, die wir nochmal checken sollten.
habe ich noch nich getestet. kann aber u.a. daran liegen, dass das erzeugen von ids etwas umständlich ist, bzw. mir noch nicht ganz ersichtlich ist wie man das machen soll. möchte man ein id-objekt für maxNodekey erzeugen, gibt es folgende meldung:
Exception in thread "main" java.lang.ClassCastException: Only ID objects with same length can be compared! This ID is 160 bits long while the other ID is 168 bits long. at de.uniba.wiai.lspi.chord.data.ID.compareTo(ID.java:381) at de.uniba.wiai.lspi.chord.data.ID.equals(ID.java:366) at app.BattlePlan.loadGrid(BattlePlan.java:155) at app.LocalTestingMain.startGameAfterEverybodyIsConnected(LocalTestingMain.java:83) at app.LocalTestingMain.main(LocalTestingMain.java:106)
irgendwie ist da ein byte zuviel ;) mir ist gestern auch aufgefallen, dass man bigintegers erzeugen kann die auch zu klein sind, dann wird gesagt, dass die id 152 bits ist und nicht 160..gehe dem mal auf die spur..
ah okay... mir fällt dabei ein, dass ich bei der schussmechanik über die felder iteriere, bis ein freies gefunden wird. dabei addiere ich immer auf den biginteger einer id einen big integer hinzu. somit ist es möglich, dass wir über die (2^160)-1 rüber laufen und die bytes dadurch zu groß werden.
das sollte sich eigentlich von selbst beheben, wenn dass verhalten beim gewinnen implementiert ist, bzw. was am ende der anwendung passieren soll... aber das ist halt nur eine vermutung. vielleicht hilft dir ja der denkansatz :)
das problem liegt bei der erzeugung von ids durch den konstruktor von id.. wenn man die id 2¹⁶⁰ -1 erzeugt, dann kommt der hex-wert
00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
raus. das liegt daran, dass die id ein byte array ist. beim erzeugen wird dann bei der länge ein wenig "gefuscht" (vllt. soll es auch so sein xD ), indem ein byte hinzukommt.. man sollte also nicht direkt eine neue id über new ID(byte[] id) erstellen. stattdessen gibt es die klassenmethode ID.valueOf(biginteger). die erzeugt aus einem bigtint eine korrekte id ;)
start knoten soll random eine id aussuchen und den broadcast auslösen. ziel ist es zu prüfen ob der broadcast überhaupt funktioniert..