TsgcWebTransportStream › Eigenschaften › Session
Die WebTransport-Sitzung, der dieser Stream gehört.
property Session: TsgcWebTransportSession read FSession;
Wird vom Konstruktor auf die Sitzung gesetzt, die den Stream erstellt hat. Sie ändert sich nie und ist bei einem Stream, den die Bibliothek Ihnen übergeben hat, niemals nil.
Schreibgeschützt. Ein Rückverweis auf die besitzende Sitzung, nützlich innerhalb eines Stream-Ereignishandlers, in dem die Sitzung oft nicht anderweitig im Gültigkeitsbereich ist. In OnData oder OnClose ist Sender der Stream, und Session führt Sie von dort zur Sitzung, zu ihrer SessionId, ihrem StreamCount oder zu OpenStream, um auf einem neuen Stream zu antworten.
Der Besitz verläuft in die andere Richtung. Die Sitzung besitzt den Stream, nicht umgekehrt. Die Stream-Liste der Sitzung gibt jeden Stream frei, wenn die Sitzung zerstört wird, geben Sie daher niemals einen Stream über diese Referenz frei und halten Sie niemals einen Stream-Zeiger über seine Sitzung hinaus am Leben. Das Lesen von Session verlängert die Lebensdauer von nichts.
Alle Streams in einer Sitzung teilen sich eine QUIC-Verbindung, daher ist Session auch der Weg, um zu prüfen, ob zwei Streams zusammengehören: Vergleichen Sie die Referenzen oder vergleichen Sie Session.SessionId.
procedure TfrmServer.OnWTStreamData(Sender: TObject; const aData: TBytes);
var
oStream: TsgcWebTransportStream;
oSession: TsgcWebTransportSession;
begin
if not (Sender is TsgcWebTransportStream) then
Exit;
oStream := TsgcWebTransportStream(Sender);
// The session is not in scope here, so reach it through the stream
oSession := oStream.Session;
memoLog.Lines.Add(Format('session %d, stream %d, %d bytes',
[oSession.SessionId, oStream.StreamId, Length(aData)]));
// Answer on a NEW unidirectional stream in the same session, rather than
// on the stream the request arrived on
with oSession.OpenStream(True) do
WriteData('ack');
end;