TsgcQUICServer › Eigenschaften › Connections

Connections Eigenschaft

Die Liste der QUIC-Verbindungen, die derzeit vom Server akzeptiert sind.

Syntax

property Connections: TObjectList read GetConnections;
// TObjectList<TsgcQUICServerConnection> on NEXTGEN compilers

Standardwert

Leere Liste

Hinweise

Schreibgeschützt. Gibt die Liste der aktiven TsgcQUICServerConnection-Objekte zurück, eines pro angenommener QUIC-Verbindung. Die Liste wird beim ersten Zugriff erstellt, sie ist daher niemals nil. Verwenden Sie sie, um an jeden Peer zu senden oder Sitzungen zu untersuchen; wenn Sie sie nur zählen möchten, bevorzugen Sie ConnectionCount, das die Liste nicht erst anlegt.

Der Server besitzt die Liste und ihre Elemente. Er fügt eine Verbindung hinzu, wenn der Listener eine annimmt, und entfernt (und gibt frei) sie, wenn der Peer die Verbindung trennt oder wenn Stop aufgerufen wird. Fügen Sie niemals selbst Einträge hinzu, löschen oder geben Sie sie frei. Um eine einzelne Verbindung zu schließen, setzen Sie ihre Eigenschaft Connected auf False.

Threading. In Delphi ist die Liste nicht thread-sicher und wird vom Hintergrund-Listener-Thread des Servers verändert, der Verbindungen annimmt, liest und entfernt. Das Aufzählen aus einem anderen Thread (zum Beispiel aus einem UI-Timer) kann zu einem Wettlauf mit diesem Thread führen und einen bereits freigegebenen Eintrag lesen. Der sichere Ort, um sie zu durchlaufen, ist innerhalb eines QUIC-Ereignishandlers, denn diese laufen auf dem Listener-Thread selbst, sodass keine gleichzeitige Änderung im Gange ist. Wenn Sie von anderer Stelle darauf zugreifen müssen, führen Sie eine eigene Liste, die Sie aus OnQUICConnect und OnQUICDisconnect pflegen und mit Ihrer eigenen Sperre schützen.

In .NET ist die Eigenschaft konstruktionsbedingt sicherer: Sie gibt ein Snapshot-Array zurück, das unter der internen Sperre des Servers erstellt wurde, sodass beim Durchlaufen niemals eine Wettlaufsituation mit der Accept-Schleife entsteht, auch wenn Einträge während der Iteration natürlich geschlossen werden können.

Da Delphi-Einträge auf klassischen Compilern als TObjectList typisiert sind, wandeln Sie ein Element vor der Verwendung in TsgcQUICServerConnection um.

Beispiel


// broadcast to every connected peer, called from a QUIC event handler
procedure TfrmServer.Broadcast(const aText: string);
var
  i: Integer;
  oConnection: TsgcQUICServerConnection;
  vBytes: TBytes;
begin
  vBytes := TEncoding.UTF8.GetBytes(aText);
  for i := 0 to oServer.Connections.Count - 1 do
  begin
    oConnection := TsgcQUICServerConnection(oServer.Connections[i]);
    if oConnection.Connected then
      oServer.WriteData(oConnection, vBytes);
  end;
end;

Zurück zu Properties