Warning: include_once(/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php): failed to open stream: No such file or directory in /var/www/html/fields/dbp09/local/config.php on line 4

Warning: include_once(): Failed opening '/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php' for inclusion (include_path='.:/opt/php/lib/php') in /var/www/html/fields/dbp09/local/config.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/fields/dbp09/local/config.php:4) in /var/www/html/pmwiki-2.2.86/pmwiki.php on line 1250
Datenbankpraktikum SS 2009 - Gruppe 1 - Backend-bausysteme

Bausystem

Das Bausystem für Gebäude und Raumschiffe ist bis auf kleine Unterschiede identisch modelliert und umgesetzt worden. Für den Gebäudebau stellt der BackendBuildingController Methoden zur Verfügung, die einen Bauauftrag validieren, ihn in die Datenbank schreiben und auch fertigstellen. Der BackendSpaceshipController biete selbe Fuktionalität für den Raumschiffsbau. Lediglich bei der Fertigstellung eines Bauauftrags ergeben sich durch die Modellierung Unterschiede.

Gebäude

Die Methode buildable des BackendBuildingControllers bekommt einen Planeten, einen User, ein Gebäude sowie die Stufe des zu bauenden Gebäudes als Argumente übergeben. Die Methode prüft nun, ob dieses Gebäude auf der gegebenden Stufe gebaut werden kann und gibt entsprechende Codes zurück. Über die Rückgabewerte lässt sich feststellen, ob das Gebäude gebaut werden kann oder ob beispielsweise noch Erz fehlt. Sofern ein Gebäude gebaut werden kann lässt sich mit der Methode build_building ein Bauauftrag erstellen. Diese Methode prüft vor der Erstellung und Eintragung einer build_order in die Datenbank mit der Methode buildable ab, ob das Gebäude gebaut werden kann und arbeitet implizit als Transaktion, da die Resourcen am Planeten abgezogen werden müssen und bei einem Fehler nicht verschwinden sollten, ohne das der Bauauftrag erstellt wurde. Der Zeitstempel für die Fertigstellung des Bauauftrags wird mit einer Methode aus dem rules_and_regulations-Modul bestimmt und eingetragen, sodass der Ticker die Verarbeitung vollziehen kann. Sobald der Zeitstempel an einer build_order erreicht wurde, ruft der Ticker die Methode complete_build_order auf, welche lediglich die Stufe des an der build_order hängenden Buildings inkrementiert und die build_order aus der Datenbank löscht.

Raumschiffe

Die Erstellung und Verarbeitung eines Bauauftrages für Raumschiffe funktioniert ähnlich, weist jedoch aufgrund unterschiedlicher Funktionalität und Modellierung im Vergleich zu dem Gebäudenbau eine leicht veränderte Verarbeitung auf. Da jedem Planeten initial vom BackendGalaxyController alle verfügbaren Gebäude mit Stufe 0 zugewiesen wird, ist die Fertigstellung einfacher und beschränkt sich auf eine Inkrementierung der entsprechenden Gebäudestufe. Des Weiteren gibt es bei Raumschiffen die Möglichkeit, mehr als ein Schiff in Auftrag zugeben, was wiederrum die Erstellung und die Verarbeitung von Raumschiffbauaufträgen beeinflusst. Die Methode buildable arbeitet analog, hat aber angepasste Rückgabewerte. Sofern die Methode build_spaceship aufgerufen und mit buildable die Durchführbarkeit bestätigt wurde, wird neben einer spaceship_build_order mit Zeitstempel für die Fertigstellung des ersten Schiffes auch noch ein Spaceship-Dummy erstellt und in der Datenbank abgelegt. Dieser Dummy erhält sowohl die Stufe und die Bezeichnung des zu bauenden Schiffes als auch eine Anzahl zu bauender Schiffe, die auf dem Attribut count, welches sonst die Anzahl an Schiffen des Typs repräsentiert, abgespeichert wird. Der Dummy wird nur über die spaceship_build_order referenziert und referenziert selbst weder einen User noch einen Planeten, sodass keines dieser Schiffe bei Auflistungen von Flotten eines Users/Planetens auftaucht. complete_spaceship_build_order muss bei Aufruf nun eine Fallunterscheidung treffen und die spaceship_build_order entsprechend verarbeiten.


Page last modified on January 22, 2010, at 03:26 PM