TsgcQUICServer › Methoden › OpenStream
Öffnet einen neuen, vom Server initiierten QUIC-Stream auf einer bestehenden Verbindung.
function OpenStream(const aConnection: TsgcQUICServerConnection; aUnidirectional: Boolean): TsgcQUICServerStream; virtual;
| Name | Typ | Beschreibung |
|---|---|---|
aConnection | const TsgcQUICServerConnection | Die Verbindung, auf der der Stream geöffnet werden soll, typischerweise die an einen Ereignishandler übergebene Verbindung. Sie muss verbunden sein, andernfalls gibt der Aufruf nil zurück. |
aUnidirectional | Boolean | True öffnet einen unidirektionalen Stream (Server zu Client), False öffnet einen bidirektionalen Stream, auf den auch der Peer schreiben kann. |
Der Wrapper für den neuen Stream, der auch der Streams-Liste der Verbindung hinzugefügt wird, oder nil bei einem Fehlschlag (TsgcQUICServerStream).
QUIC erlaubt es beiden Endpunkten, Streams zu öffnen. OpenStream erstellt einen zusätzlichen Stream auf aConnection, getrennt vom Standard-Datenstream, den der Peer geöffnet hat und auf den WriteData abzielt. Übergeben Sie den zurückgegebenen Wrapper an WriteStreamData, um Bytes darauf zu senden.
Die Methode gibt nil zurück, anstatt eine Ausnahme auszulösen, wenn sie den Stream nicht öffnen kann: wenn aConnection nil oder nicht verbunden ist oder wenn der geladene OpenSSL-Build die QUIC-Stream-API nicht exportiert. Prüfen Sie das Ergebnis immer, bevor Sie es verwenden.
Der zurückgegebene Stream gehört der Verbindung und wird mit ihr freigegeben, geben Sie ihn also niemals selbst frei. Seine StreamId wird von OpenSSL zurückgelesen und ist -1, wenn die ID nicht ermittelt werden konnte. Ein vom Server geöffneter unidirektionaler Stream ist nur schreibbar, der Transport liest ihn nie, daher löst er kein OnQUICStreamData aus. Ein vom Server geöffneter bidirektionaler Stream wird gelesen, sodass die Antworten des Peers darauf über dieses Ereignis eintreffen.
Das Lesen zusätzlicher Streams erfordert den Multi-Stream-Modus, siehe AlwaysMultiStream. Das Öffnen und Beschreiben eines Streams nicht, OpenStream funktioniert auch auf einer einfachen Einzelstream-Verbindung, Sie erhalten darüber lediglich nichts zurück. Vom Server initiierte Streams sind die Grundlage, auf der übergeordnete Transporte wie WebTransport aufbauen.
Diese Methode ist derzeit nur in der Delphi/C++Builder-Implementierung verfügbar. Die .NET-Implementierung stellt kein OpenStream bereit.
var
oStream: TsgcQUICServerStream;
begin
oStream := oServer.OpenStream(aConnection, False);
if Assigned(oStream) then
begin
Log('opened stream id ' + IntToStr(oStream.StreamId));
oServer.WriteStreamData(oStream, TEncoding.UTF8.GetBytes('hello'));
end
else
Log('could not open the stream');
end;