Das Nachrichtenzentrum ist der zentraler Kommunikationsserver von Spectre. Es gibt zwei Schnittstellen, mit denen das Nachrichtenzentrum kommunizieren kann: HTTP/REST und MQTT.

Übersicht

Übersicht über Kommunikation mit dem Nachrichtenzentrum

Interne Struktur des Nachrichtenzentrums

REST

Das Nachrichtenzentrum implementiert einen HTTP Server, über den die REST Endpoints angesteuert werden können. Der HTTP Server wurde mit QHTTPEngine[2] entwickelt. Die implementierten Endpoints dienen zum Lesen und Modifizieren der Daten in den Datenbanken.

Ausschnitt der mit OpenAPI spezifizierten Endpoints

Beispiel eines Enpoints der OpenAPI Spezifikation

/spies:
  get:
    summary: Get all spies
    operationId: getSpies
    parameters:
      - in: query
        name: name
        description: Name of the spy
        schema:
          type: string
      - in: query
        name: mac
        description: Mac address of the spy
        schema:
          type: string
          pattern: '^[0-9A-F]{2}(:[0-9A-F]{2}){5}$|^[0-9a-f]{2}(:[0-9a-f]{2}){5}$'
    responses:
      '200':
        description: Returns a list of all spies
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SpyList'
      default:
        $ref: '#/components/responses/Error'

MQTT

Der MQTT Client des Nachrichtenzentrums wurde mithilfe von Qt MQTT entwickelt. Im Gegensatz zu HTTP ist über MQTT eine bidirektionale Kommunikation möglich. Somit können damit folgende Punkte umgesetzt werden, die über die REST API nicht (sinnvoll) möglich wären:

  • Benachrichtigung über eine neue Mission an die Spione
  • Heartbeats der Spione an den Server
  • Live-Missionen
  1. https://www.qt.io/
  2. https://github.com/nitroshare/qhttpengine