Client -> Auto

 

Nachdem der Client und ein Auto erfolgreich mit dem Server verbunden sind, kann eine Verbindung hergestellt werden um das Auto zu steuern und dabei die Kameradaten am Client darzustellen.
Dazu wählt der Benutzer das verfügbare Auto aus der Liste aus und der Server wird über die Auswahl benachrichtigt. Falls das Auto in dieser Zeit die Verbindung getrennt hat, bereits mit einem anderen Client verbunden wurde oder dem Benutzer die Rechte fehlen dieses Auto zu steuern, wird eine entsprechende Fehlermeldung angezeigt. Ist hingegen alles in Ordnung, wird das Auto für diesen Benutzer reserviert und es beginnt der Verbindungsaufbau.

Im ersten Schritt werden sowohl der Client als auch das Auto über die erfolgreiche Reservierung informiert. Am LCD Display des Autos wird der Name des Benutzers angezeigt, welcher nun das Auto steuern wird.
Bis zu diesem Zeitpunkt geschah der gesamte Datenaustausch über eine TCP Verbindung. Diese stellt zwar sicher, dass kein Paket verloren geht und alle in der richtigen Reihenfolge ankommen, produziert jedoch dabei einen gewissen Overhead und ist somit nicht geeignet für den schnellen Datenaustausch kurzer und aktueller Daten. Dafür wird das UDP Protokoll verwendet.

Um nun eine neue Verbindung per UDP herzustellen, sendet der Server an den Client und an das Auto jeweils eine zufällig gewählte 16-Bit Zahl. Diese Zahl senden beide an den Server zurück, diesmal jedoch über eine neue UDP Verbindung. Da bei UDP Paketen nicht sichergestellt wird, dass sie am Empfänger auch ankommen, wird dieser Vorgang solange wiederholt, bis die Verbindung erfolgreich hergestellt wurde. Konnte auch nach 8 Versuchen keine Verbindung zum Server hergestellt werden, wird der Versuch beendet und das Auto wieder freigegeben. Am Client wird eine entsprechende Fehlermeldung angezeigt.

Sobald der Server ein neues Paket über UDP empfangen hat, kann mit der Absenderadresse und der 16-Bit Zahl festgestellt werden, zu welcher Verbindung das Paket gehört. Absender- IP-Adresse und Port der UDP Verbindung werden am Server nun jeweils zum Client und Auto gespeichert.

Sobald beide erfolgreich erkannt wurden, beginnt der eigentliche Datenaustausch und somit die Steuerung des Autos. Dabei beginnt das Auto die Kameradaten über die gerade hergestellte UDP Verbindung zu senden und der Client sendet die Steuerungsdaten (Geschwindigkeit, Lenkung). Die Daten werden vom Server einfach weitergeleitet.

Bei den Steuerungsdaten des Clients wird jedoch vom Server noch eingegriffen. Es können für die Autos Maximalgeschwindigkeiten für jeden Benutzer festgelegt werden. Diese Limits werden dann vom Server eingerechnet und das Steuerungssignal entsprechend skaliert.

Der Server überwacht zudem, ob die Kamera des Autos regelmäßig Daten sendet. Wird 5 Sekunden lang kein neues Paket von der Kamera empfangen, sendet der Server selbstständig ein Paket an das Auto um den LiveStream neu zu starten.