Bugsmasher Episode 1

Danke sehr für das Transscript an: Erris


 

 

Hallo alle zusammen,

willkommen zu dem ganz neuen Bugsmasher. Endlich habe ich ein Solo. Bekomme mein eigenes Spinoff, in Tradition zu Joey, Caprica und Lone Gunman. Dies wird gut werden und ich bin bereit um ein paar Bugs zu smashen!

So Leute, hier haben wir einen kleinen netten Multiplayer Bug. Zu meiner Linken habe ich meinen dedizierten Server und zu meiner Rechten habe ich 3 Clients die damit verbunden sind. Ihr seht nun den Status jedes Einzelnen und das sie bereit sind für das Game.

Dieser Bug, den ich hier habe ist der, dass wenn ein Spieler ejected und sich entscheidet das Spiel zu verlassen, können die anderen Beiden nicht mehr Antworten. Sehen wir mal was passiert.

Lassen wir mal diesen Typen hier ejecten und danach disconnecten und schauen was der Server uns mitteilt.

Jeder ist in-game schaut euch das an. Unser Typ hängt da in der Gegend herum und ist im Disconnected Modus. Das ist natürlich sehr schlecht, denn wenn ich nun dem anderen Typ sage “Eject” und auf den Respawn Meldung warte, und er es aber schlichtweg nicht macht. Warum? Nun ja, der Server versucht immernoch den ersten Typ zu disconnecten und dieser blockiert unseren zweiten Typ. Spieler 4 ist disconnected und Spieler 2 versucht zu respawnen, doch der arme Spieler 4 versucht sich immernoch erfolgreich zu disconnecten und blockiert somit Spieler 2. Yaaaaay verwirrtes System.

So.

Was passiert denn hier genau? Finden wir es heraus.

Schliessen wir mal unseren dedizierten Server und fahren alle unsere kleinen niedlichen SC Instanzen runter. Wooo.

Ok, nun ist alles ausgeschalten. Nun, was passiert da? Gehen wir mal zum spassigen Teil des Codes. Doo doo doo, doo doo, doo doo.

Wenn der Client entscheidet, hey ich möchte gerne entfernt werden, dann stösst er eine Aufgabe an die sagt, hey Datastore, ich muss entfernt werden. Und der Datastore wird dann seine Sache machen, den Spieler löschen und dann die Aufgabe wieder schliessen. In unserem kleinen Datastore geht es, wenn es angestossen wurde, nun hierhin und danach hierhin und es wird… Datastore läuft noch… Da ist auch der Spieler und all seine Informationen und der Status ist nicht disconnected, er ist immernoch in-game.

Also werden wir nicht hierher gehen sonder zu einem anderen Teil des Codes. Da werden wir auf Disconnect gesetzt und werden da einen Strang erstellen, der den Spieler löscht. Alle seine Schiffe werden gelöscht, alle seine Items noch dazu und alles was irgendwie zu ihm gelinkt ist. Es wird dann andere Sektionen des Codes schliessen und dann sollten wir gut damit sein. Ist es nicht so?

Problem ist…

Ich werde nie ein TV Star werden.

DiscoLando (vermutlich) – Du hast deine eigene Show!

Nach einer Million Anläufe

Was passiert, ist das eine andere solcher Aufgaben startet und wir mit der selben Logik hinterher gehen. Wir gehen nach dahin und uho.. unser Status ist schon disconnected. Wir werden nun die Funktion starten, das der Spieler gelöscht wird, doch ist dieser immernoch beschäftigt mit dem Prozess den Strang zu verfolgen. Ok wir lassen den Spieler einfach mal, denn wir haben nun eine andere Aufgabe gestartet und der Disconnect ist nun wie.. Och mein Gott, es versucht nun alle Prozesse zu bearbeiten, weil der Spieler nicht mehr da ist und ich stecke nun fest und die Sachen spielen nun verrückt.

Nun dies kann von verschiedenen Sachen herkommen. Erstens, wir haben den Disconnect. Zweitens, wir haben den Spieler gelöscht, er versucht nun alles aufzuräumen und startet diese Aufgabe mehrmals. Doch wir wollen sicher gehen, das wir den Spieler nicht löschen bevor wir alles haben und bereit dafür sind.

Was wir nun machen werden, ist zu sagen hey, solange wir noch Spieler Informationen haben, wird die persistent Datenbank mir sagen wenn ich fertig bin und der Spieler nicht mehr in der Liste ist. Wenn der Spieler noch in der Liste ist, wollen wir sicher gehen das er im Disconnecting Teil bleibt und wir nicht einen Neuen erstellen und somit die anderen Spieler tangieren.

So, wir werden nun einen Error Code generieren, das soviel bedeutet, dass wenn es einen Error gibt, wir ihn abfangen werden. Wenn sich nun jemand entscheidet, eine neue Aufgabe zu erstellen obwohl wir schon eine Aufgabe am Laufen haben, wird es nun diese Aufgabe einfach löschen aber nicht den Spieler killen. Der aller Erster wird es aber tun. So sollten wir sicher sein. Wenn nun jemand anderes eine Aufgabe laufen lassen möchte um den Spieler zu killen, dann wird es warten bis dieser Prozess durch ist. Nun, wenn dies nun durch ist, dann wird es den Spieler aus der Liste entfernen, damit der Disconnect Teil durchlaufen kann und der Spieler nicht mehr vorhanden ist. Somit kann der Code danach weiter durchlaufen. Es besteht immernoch, dass die Löschaufgabe mehrmals aufgerufen wird, aber den Spieler nicht mehr zu früh wegradiert.

Lassen wir mal dem Kleinen etwas Lauf. Ok, jetzt habe ich wieder alle 3 Clients online und an unserem dedizierten Server verbunden. Schauen wir mal was passiert wenn wir Eject drücken und disconnecten.

Wenn wir nun alles richtig gemacht haben und das Problem gefixt haben… da ist er auch schon durch. Er ging von in-game zu disconnecting und danach gelöscht.

Und jetzt drücken wir eject, da sollte dieser Typ hier wieder fähig sein zu respawnen. Doo doo doo doo, wir warten kurz auf die Respawn Meldung X und… Er respawnt, whooo-hoo.

Hat etwas Zeit gebraucht, da ich einen Debugger im Hintergrund am Laufen habe, der den Prozess ein bisschen verlangsamt. Ging aber trotzdem flott.

So, da haben wir es nun. Ein kleiner Spass-Bug problem gelöst. Multi-threading. Das sind immer die feinen. Multi-threading MIT Multiplayer.

Wir Ihr nun gesehen habt, haben wir hier einen Multi-thread Bug, der die Spieler schon vorher gelöscht hat bevor unsere Datenbank in der Lage war es vorher zu säubern. Wir haben lediglich allen gesagt, das sie doch eine Minute warten sollen bis es gesäubert ist und danach die Löschung erfolgt wenn es sicher ist.

Nichtsdestotrotz hoffen wir natürlich, dass euch dieses neue und  kleine Format gefallen hat, unser ganz neuer Bugsmashers.

Wenn ihr Kommentare, Fragen, Beleidigungen habt oder es einfach gerne habt, lasst es uns wissen. Wir lesen eure Antworten, manchmal nochmals und eventuell nochmals aber wir lesen sie.

Wooo!

 

QUELLE: Imperial News Network


// End Transmission

1 Kommentar

Schreibe einen Kommentar zu Vetrecs Antworten abbrechen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.