TsgcTCPClient › Events › OnBinary
Si attiva quando byte grezzi vengono ricevuti dal server TCP.
property OnBinary: TsgcWSBinaryEvent;
// TsgcWSBinaryEvent = procedure(Connection: TsgcWSConnection; const Data: TMemoryStream) of object
—
Poiché TsgcTCPClient utilizza TCP raw senza un handshake WebSocket, non esistono frame tipizzati, quindi OnBinary consegna i byte esattamente come sono stati letti dal socket. Quando TCPEndOfFrameScanBuffer è eofScanNone, ogni lettura dal socket attiva l'evento con tutto ciò che è stato bufferizzato; quando è eofScanLatestBytes o eofScanAllBytes, lo stream viene suddiviso sul delimitatore TCPEndOfFrame e viene generato un evento per ogni frame logico. Il parametro Data espone i byte decodificati come TMemoryStream posizionato a 0; leggerlo immediatamente perché lo stream è di proprietà del client e diventa non valido dopo il ritorno dell'handler. Per impostazione predefinita NotifyEvents è neAsynchronous, quindi OnBinary è sincronizzato con il thread principale ed è sicuro aggiornare i controlli UI dall'handler; passare a neNoSync se si deve evitare la sincronizzazione e gestire autonomamente la thread-safety.
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;