TsgcWebTransportStream › Eigenschaften › HeaderSent

HeaderSent Eigenschaft

Buchführungs-Flag, das festhält, dass der WebTransport-Header des Streams geschrieben wurde. Die Bibliothek verwaltet es, Anwendungen lesen und schreiben es nicht.

Syntax

property HeaderSent: Boolean read FHeaderSent write FHeaderSent;

Typ

Boolean (bool in C++Builder).

Hinweise

False bei der Konstruktion. Es wird fast sofort True: OpenStream setzt es nach dem Schreiben des Headers, und AddIncomingStream setzt es unmittelbar, da der Peer bereits einen gesendet hat. Wenn Ihr Code einen Stream zu sehen bekommt, ist es immer True.

Hinweise

Jeder WebTransport-Stream beginnt mit einem Header, der seine Sitzung benennt, varint(0x54) + varint(SessionId) für einen unidirektionalen Stream oder varint(0x41) + varint(SessionId) für einen bidirektionalen. Er muss genau einmal auftreten, ganz am Anfang. HeaderSent ist das Flag, das festhält, dass dies geschehen ist.

Schreiben Sie sie nicht. Der Setter ist public, weil OpenStream und AddIncomingStream außerhalb der Stream-Klasse liegen und sie setzen müssen. Es bringt nichts Gutes, wenn eine Anwendung sie anfasst: Sie hält eine Tatsache über Bytes fest, die bereits auf der Leitung sind, und das Ändern des Flags ändert diese Bytes nicht.

Lesen Sie es auch nicht als Bereitschaftsprüfung. Es ist verlockend, es vor dem Schreiben zu prüfen, aber es sagt nichts Nützliches aus: Es ist auf jedem erreichbaren Stream True. Ein Stream ist schreibbereit, sobald Sie ihn haben, und StreamId ist die Eigenschaft, die Sie prüfen, wenn Sie wissen möchten, ob ein echter QUIC-Stream gebunden wurde.

Das Flag existiert für die interne Buchführung der Bibliothek und ist hier nur dokumentiert, weil es öffentlich ist. Betrachten Sie es als Implementierungsdetail.

Dieses Member ist derzeit nur in der Delphi/C++Builder-Implementierung verfügbar. Die .NET-Klasse hat kein Äquivalent: Dort wird der Header vom Open-Stream-Hook des Transports geschrieben, sodass kein Flag am Stream-Objekt gehalten wird.

Beispiel


// Applications do not use HeaderSent. This shows only where the library
// sets it, so its meaning is clear.

// In OpenStream: the header is written, then the fact is recorded
//   Result.DoWriteBytes(vHeader);
//   Result.HeaderSent := True;

// In AddIncomingStream: the PEER sent the header, so it is already true
//   Result := TsgcWebTransportStream.Create(Self, aStreamId, aUnidirectional);
//   Result.HeaderSent := True;

// Every stream you can reach already has HeaderSent = True, so this test
// is always taken and tells you nothing:
if FStream.HeaderSent then
  FStream.WriteData('payload');

// Just write. If you need to know a QUIC stream was bound, check StreamId:
if FStream.StreamId >= 0 then
  FStream.WriteData('payload');

Zurück zu Properties