TsgcTCPClient › Ereignisse › OnBinary
Wird ausgelöst, wenn rohe Bytes vom TCP-Server empfangen wurden.
property OnBinary: TsgcWSBinaryEvent;
// TsgcWSBinaryEvent = procedure(Connection: TsgcWSConnection; const Data: TMemoryStream) of object
—
Da TsgcTCPClient rohes TCP ohne WebSocket-Handshake spricht, gibt es keine typisierten Frames, sodass OnBinary die Bytes genau so liefert, wie sie aus dem Socket gelesen wurden. Wenn TCPEndOfFrameScanBuffer eofScanNone ist, löst jeder Socket-Lesevorgang das Ereignis mit dem aus, was gepuffert wurde; wenn es eofScanLatestBytes oder eofScanAllBytes ist, wird der Stream am TCPEndOfFrame-Trennzeichen aufgeteilt und ein Ereignis pro logischem Frame ausgelöst. Der Parameter Data stellt die dekodierten Bytes als TMemoryStream bereit, der auf 0 positioniert ist; lesen Sie ihn sofort, da der Stream dem Client gehört und nach Rückkehr des Handlers ungültig wird. Standardmäßig ist NotifyEvents neAsynchronous, sodass OnBinary mit dem Haupt-Thread synchronisiert wird und es sicher ist, UI-Steuerelemente aus dem Handler zu aktualisieren; wechseln Sie zu neNoSync, wenn Sie die Synchronisierung vermeiden und die Threadsicherheit selbst handhaben müssen.
procedure OnBinary(Connection: TsgcWSConnection; const Data: TMemoryStream);
var
oBytes: TBytes;
begin
SetLength(oBytes, Data.Size);
Data.Position := 0;
Data.ReadBuffer(oBytes[0], Data.Size);
// ... process the raw TCP payload
end;