Software Challenge : Ablauf eines Spiels

Grundsätzlich werden alle Spiele von der Rails WebApp initiiert.

  1. Job wird von der Rails App in die Queue gelegt (das ist ein TestJob beim Testen von Clients oder ein Job zum Spielen von Freundschaftsspielen oder Wettkampfspielen vom Scheduler. Es gibt auch noch die Möglichkeit, manuelle Spiele zu spielen)
  2. DelayedJob arbeitet den Job ab. Letztendlich wird Round#perform aufgerufen, welche ueber den so_cha_manager das Spiel startet.
  3. Der so_cha_manager kommuniziert mit dem softwarechallenge-server, um einen Raum anzulegen
  4. Der so_cha_manager kopiert die nötigen Client zips in einen Order, der vom producer.jar überwacht wird
  5. Der producer.jar bewegt die zips in ein temporäres Verzeichnis und erzeugt zwei Nachrichten über RabbitMQ. Eine um die ClientVM zu starten und eine mit dem Dateinamen des Client zips
  6. Der daemonconsumer.jar auf numerobis wird durch die beiden Nachrichten dazu veranlasst, das Script bin/startVM.sh mit dem Dateinamen aus der Nachricht aufzurufen
  7. das startVM.sh Script startet nun eine VMClient, kopiert die Client zip auf die VM und ruft dort consume.sh auf (das startVM.sh produziert ausführliche Logfiles auf numerobis unter log/vmclient/[Jahr]/[Monat]/[Tag]/)
  8. consume.sh auf der VMClient entpackt die Client zip und startet den Client, der sich mit dem softwarechallenge-server verbindet und den Raum betritt
  9. das startVM.sh Script wartet, bis das Spiel vorbei ist (oder ein Timeout erreicht ist) und sichert die Log-Dateien der Clients, indem es das Log auf die VMMain kopiert und dort das Script getLog.sh aufruft
  10. getLog.sh auf der VMMain untersucht das Logfile, erhält dadurch die ClientID und verschiebt das Log an die richtige Stelle in clientlogs
  11. der so_cha_manager nimmt am Spiel als Beobachter teil und sammelt nach dessen Ende die Wertung ein