TsgcWebTransportSession › Methoden › Create
Erstellt eine Sitzung, die an eine Session-ID gebunden ist. Der HTTP/3-Client und -Server rufen dies für Sie auf; Anwendungen tun das nicht.
constructor Create(aSessionId: Int64); virtual;
| Name | Typ | Beschreibung |
|---|---|---|
aSessionId | Int64 | Die QUIC-Stream-ID der Extended-CONNECT-Anfrage, die die Sitzung aufgebaut hat. Sie wird zur schreibgeschützten SessionId und verankert jeden Stream-Header und jedes Datagramm-Präfix in der Sitzung. |
Sie rufen dies nicht auf. Eine Sitzung hat nur dann eine Bedeutung, wenn sie mit einer aktiven QUIC-Verbindung verdrahtet ist, und diese Verdrahtung ist nicht Teil des Konstruktors. Sitzungen erreichen Sie bereits fertig aufgebaut:
TsgcHTTP3Client.WebTransportConnect erzeugt eine solche mit der CONNECT-Stream-ID nach einem :status = 200, weist die drei Transport-Hooks zu und fügt sie zu WebTransportSessions hinzu.OnWebTransportSession aus, damit Sie sie annehmen oder ablehnen können.
Der Konstruktor selbst setzt nur SessionId und erstellt die interne Stream-Liste sowie deren kritischen Abschnitt. Er weist keine Transport-Hooks zu. Eine Sitzung, die Sie selbst konstruieren, hat keine Möglichkeit, auf eine Verbindung zu schreiben: OpenStream würde Streams erzeugen, deren Bytes ins Leere laufen. Er ist public und virtual, damit ein eigener QUIC-Transport eine Sitzung selbst aufbauen und verdrahten kann und damit ein Nachfahre ihn erweitern kann.
Besitz. Die Sitzungsregistrierung der Verbindung besitzt die Sitzung und gibt sie frei, und der Destruktor der Sitzung gibt die Stream-Liste zusammen mit jedem darin enthaltenen Stream frei. Geben Sie niemals selbst eine Sitzung frei und behalten Sie niemals eine Referenz auf eine Sitzung oder auf einen ihrer Streams über die Lebensdauer des Clients oder der Verbindung hinaus, dem bzw. der sie gehört. Auf dem Client gibt das Freigeben des TsgcHTTP3Client jede Sitzung und jeden darunterliegenden Stream frei.
Dieses Mitglied ist derzeit nur in der Delphi/C++Builder-Implementierung verfügbar. Die .NET-Klasse besitzt einen entsprechenden Konstruktor, dieser ist jedoch internal und kann nicht aus Anwendungscode aufgerufen werden.
// Applications never construct a session. They receive one:
// Client: WebTransportConnect builds and wires it, or returns nil.
FSession := FClient.WebTransportConnect('https://127.0.0.1:4433/echo');
if Assigned(FSession) then
FSession.OnStream := OnWTStream;
// FSession is owned by FClient.WebTransportSessions. Do not free it.
// Server: the session arrives already built and wired.
procedure TfrmServer.OnWTSession(Sender: TObject;
const aConnection: TsgcQUICServerConnection;
const aSession: TsgcWebTransportSession; var aAccept: Boolean);
begin
aAccept := True; // accept; the server registers and owns it
aSession.OnStream := OnWTStream;
end;