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 - Xml-ANZ 2

Controller und Templates zur Anzeige und Erstellung von Aufträgen

Gebäude und Raumschiffe bauen

Für den Bau von Gebäuden stehen im BuildBuildingController die Actions

  • buildable, welche bei übergebener GebäudeID mit der Action buildable aus dem BackendBuildingController überprüft, ob das Gebäude gebaut werden kann und
  • build_building, welche entsprechend die Action build_building aus dem BackendBuildingController anstößt und das Gebäude der übergebenen ID um ein Level erhöht

zur Verfügung. Der Aufruf einer Action aus einem anderen Controller erfolgt (hier beispielhaft für oben genannte Action build_building) mit

BackendBuildingController.new().build_building(@planet, @buildingname, @level, @user)

wobei die lokalen Variablen

  • @planet den Planeten, auf dem sich das auszubauende Gebäude befindet,
  • @buildingname den Namen des auszubauenden Gebäudetyps,
  • @level die nächste Levelstufe, auf die ausgebaut wird und
  • @user den aktuellen User

bezeichnen.

Auch hier wird das oben schon erwähnte Result-Template aufgerufen.

Der BuildSpaceshipController für den Bau von Raumschiffen ähnelt dem BuildBuildingController, hat neben den Actions buildable und build_spaceship außerdem eine Action buildable_spaceships. Diese liefert für alle Raumschifftypen und alle fünf möglichen Ausbaulevels die Anzahl an theoretisch baubaren Schiffen auf dem Planeten, dessen ID übergeben wird, berechnet aus vorhandenen Ressourcen und dem aktuellen Schiffswerftlevel zurück.

Truppenbewegungen

Eine Flotte (TroopMovement) ist gekennzeichnet durch einen Start- und Zielplaneten, eine Mission und einer Vielzahl von Raumschiffen. Vom iPhone wird nun eine URL mit all diesen Angaben gesendet:

http://server:port/troop_movement/create_new_troop_movement.xml?
  startplanet_id=ID&targetplanet_id=ID&mission=ID&ship[x]=ID&
  count[x]=ID&ore=INTEGER&gas=INTEGER&crystal=INTEGER

"ship[x]" bezeichnet hier einen Schiffstypen, wie z.B. einen Jäger, der bereits ein bestimmtes Level erreicht hat. Unter "count[x]" wird die Anzahl der Schiffe dieses Schiffstypen angegeben. Da zu jedem der acht Schiffstypen je fünf Level erreichbar sind, sind 40 Parameter "ship[x]" sowie 40 Parameter "count[x]" möglich.
Da vom Backend für ein TroopMovement (BackendTroopMovementController) die einzelnen Methoden

  • create_troop_movement
  • add_ships
  • add_resources
  • starting
  • delete_troop_movement

bereitgestellt werden, müssen die Parameter in der URL aufgeschlüsselt werden und die Methodenaufrufe im TroopMovementController einzeln geschehen.
Sollte eine Flotte erfolgreich erstellt und Raumschiffe sowie Ressourcen hinzugefügt worden sein, wird eine XML-Datei mit der Nachricht "Flotte erfolgreich gestartet" an das iPhone gesendet.
Wenn ein TroopMovement gestartet wird, wird die Ankunftszeit berechnet und gesetzt. Um inkonsistente Daten zu vermeiden, wird das TroopMovement gelöscht, falls es nicht gestartet werden konnte.

Allianzen

Für den Umgang mit Allianzen, deren Vorteile es sind, dass Mitglieder derselben Allianz sich gegenseitig nicht angreifen können und über Rundmails leichter miteinander kommunizieren können, stehen im AllianceController folgende Actions zur Verfügung:

  • show_alliance, um eine Allianz zu übergebener ID mit Leader und allen Mitgliedern (jeweils mit Namen und ID) anzeigen zu können
  • my_alliance, um Informationen zu Name, ID, LeaderID und -name und Anzahl der Mitglieder der Allianz anzuzeigen, in der der User ist
  • show_applicants für den Leader einer Allianz, um alle Bewerber mit Namen und ID anzuzeigen
  • join, um als Leader der Allianz einen Bewerber aufzunehmen
  • show_all_alliances, um alle Allianzen mit Namen, LeaderID und -namen, und Anzahl an Mitgliedern anzuzeigen
  • apply_alliance, um sich für die Aufnahme in die Allianz, deren ID übergeben wird, zu bewerben
  • leave_alliance, um die Allianz, deren ID übergeben wird, zu verlassen
  • found_alliance, um eine Allianz, deren Namen übergeben wird, neu zu gründen; als Gründer ist man automatisch der Leader
  • change_leader, um als aktueller Leader denjenigen User zum Leader zu benennen, dessen ID übergeben wird
  • delete_alliance, um als Leader die Allianz aufzulösen
  • circular_mail, um eine Rundmail mit übergebenen Betreff und Text an alle Mitglieder der Allianz, in der man sich befindet, sendet.

Das Nachrichtensystem

Für die Kommunikation mit anderen Usern, insbesondere Allianzmitgliedern (siehe Allianzen), wird ein Nachrichtensystem benötigt. Dafür sind im MessageController folgende Actions implementiert:

  • show_messages für die Anzeige aller Nachrichten, die ein User empfangen hat, sortiert nach Alter jeweils in den Kategorien gelesen und ungelesen
  • read_message zum Lesen einer Nachricht mit der übergebenen ID
  • show_sent_messages zum Anzeigen aller vom User versendeten Nachrichten
  • write_message zum Schreiben einer Nachricht an einen User, dessen Namen man zusammen mit einem Betreff und dem Text übergibt
  • delete_message zum Löschen einer Nachricht mit übergebener ID
  • delete_all_messages zum Löschen aller Nachrichten des eingeloggten Users


Page last modified on August 22, 2009, at 11:25 AM