TsgcQUICClient › Ereignisse › OnQUICStreamData
Wird mit den Bytes ausgelöst, die von einem zusätzlichen QUIC-Stream gelesen wurden, sobald der Multi-Stream-Modus aktiviert wurde.
property OnQUICStreamData: TsgcQUICClientStreamDataEvent;
// TsgcQUICClientStreamDataEvent = procedure(Sender: TObject; aStreamId: Int64;
// aUnidirectional: Boolean; const aData: TBytes) of object;
| Name | Typ | Beschreibung |
|---|---|---|
Sender | TObject | Die TsgcQUICClient-Instanz, die das Ereignis ausgelöst hat. |
aStreamId | Int64 | QUIC-Stream-Bezeichner, von dem die Bytes gelesen wurden. Verwenden Sie ihn, um Daten zu demultiplexen, wenn mehrere Streams gleichzeitig geöffnet sind. |
aUnidirectional | Boolean | True, wenn der Stream unidirektional ist, sodass nichts auf ihm zurückgeschrieben werden kann. False bei einem bidirektionalen Stream. |
aData | const TBytes | Die aus dem Stream gelesenen Bytes. QUIC bewahrt keine Nachrichtengrenzen der Anwendung, eine logische Nachricht kann daher auf mehrere Ereignisse verteilt eintreffen. |
OnQUICStreamData ist der einzige Lesepfad, den TsgcQUICClient bereitstellt, und es ist untätig, bis EnableMultiStream aufgerufen wurde. Ein einfacher QUIC-Client behält sein Single-Stream-Verhalten bei und löst es nie aus. Rufen Sie EnableMultiStream auf, sobald die Verbindung steht, zum Beispiel innerhalb von OnQUICConnect, und der Client sammelt dann sowohl die Streams ein, die der Peer öffnet, als auch die Streams, die Sie mit OpenStream öffnen, und löst dieses Ereignis für jeden gelesenen Byte-Block aus.
Das Ereignis wird aus dem Lese-Thread der Verbindung ausgelöst. Die Komponente setzt NotifyEvents auf neNoSync, der Handler läuft also nicht im Haupt-Thread: Greifen Sie niemals direkt aus ihm auf VCL- oder FMX-Steuerelemente zu, marshallen Sie stattdessen zum Haupt-Thread.
Dieses Mitglied ist derzeit nur in der Delphi/C++Builder-Implementierung verfügbar und erfordert die integrierte OpenSSL-QUIC-Engine. Siehe TsgcQUICClient für den Unterschied zwischen den beiden QUIC-Engines.
oClient.OnQUICConnect := OnQUICConnectEvent;
oClient.OnQUICStreamData := OnQUICStreamDataEvent;
oClient.Connect;
procedure OnQUICConnectEvent(Sender: TObject; const Connection: TsgcQUICConnection);
begin
// required before any stream data is reported
TsgcQUICClient(Sender).EnableMultiStream;
end;
procedure OnQUICStreamDataEvent(Sender: TObject; aStreamId: Int64;
aUnidirectional: Boolean; const aData: TBytes);
begin
Log(Format('stream %d (%s): %d bytes', [aStreamId,
BoolToStr(aUnidirectional, True), Length(aData)]));
end;