TsgcWebTransportStream › Methoden › Create
Erzeugt einen an eine Sitzung gebundenen Stream. Die Sitzung ruft dies für Sie auf, Anwendungen tun es nicht.
constructor Create(const aSession: TsgcWebTransportSession;
aStreamId: Int64; aUnidirectional: Boolean); virtual;
| Name | Typ | Beschreibung |
|---|---|---|
aSession | const TsgcWebTransportSession | Die besitzende Sitzung. Wird zur schreibgeschützten Eigenschaft Session und ändert sich nie. |
aStreamId | Int64 | Die QUIC-Stream-ID oder -1, wenn sie noch nicht bekannt ist. OpenStream übergibt -1 und lässt sie vom Transport aus OnOpenStream ausfüllen; AddIncomingStream übergibt die echte Stream-ID des Peers. |
aUnidirectional | Boolean | True für einen Einweg-Stream, False für einen bidirektionalen. Wird zur schreibgeschützten Eigenschaft Unidirectional und kann danach nicht mehr geändert werden. |
Sie rufen dies nicht auf. Ein von Hand erzeugter Stream hat keinen QUIC-Stream darunter, keinen Writer und steht in der Liste keiner Sitzung, sodass ein Schreiben darauf nichts bewirkt und niemals Daten an ihn geleitet werden. Streams erreichen Sie bereits erstellt und verdrahtet:
StreamId = -1, lässt den Transport über OnOpenStream einen echten QUIC-Stream binden, schreibt den WebTransport-Header und registriert ihn. Die Methode gibt Ihnen den Stream zurück.OnStream-Ereignis der Sitzung.
Der Konstruktor erfasst nur die drei Argumente und löscht die Flags HeaderSent und closed. Er weist keinen Writer zu, sendet nichts und fügt den Stream nicht der Sitzung hinzu; OpenStream und AddIncomingStream erledigen all das anschließend. Er ist public und virtual, damit ein benutzerdefinierter Transport Streams konstruieren kann und damit ein Nachkomme einen solchen erweitern kann.
Besitz. Das Erzeugen eines Streams registriert ihn nirgends, ein Stream, den Sie selbst erstellen, muss daher von Ihnen freigegeben werden. Jeder Stream, den die Bibliothek erstellt, gelangt direkt in die Liste der Sitzung, die ihn besitzt und freigibt. Geben Sie niemals einen Stream frei, den Sie von OpenStream oder OnStream erhalten haben, und behalten Sie niemals eine Referenz darauf über die Lebensdauer seiner Sitzung hinaus.
Beachten Sie, dass aSession nur als Rückverweis gespeichert wird. Die Übergabe einer Sitzung registriert den Stream nicht bei ihr und lässt StreamCount nicht ansteigen.
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 stream. They receive one:
// Opened by us: OpenStream constructs, wires and registers it
FStream := FSession.OpenStream(False); // False = bidirectional
FStream.OnData := OnStreamData;
FStream.WriteData('Hello WebTransport');
// FStream is owned by FSession. Do not free it.
// Opened by the peer: it arrives already constructed and registered
procedure TfrmServer.OnWTStream(Sender: TObject;
const aStream: TsgcWebTransportStream);
begin
aStream.OnData := OnWTStreamData;
// aStream.Session, StreamId and Unidirectional are already set,
// and HeaderSent is True because the peer sent the header.
end;