TsgcTCPClient › Zdarzenia › OnBinary
Wywoływane po odebraniu surowych bajtów z serwera TCP.
property OnBinary: TsgcWSBinaryEvent;
// TsgcWSBinaryEvent = procedure(Connection: TsgcWSConnection; const Data: TMemoryStream) of object
—
Ponieważ TsgcTCPClient komunikuje się przez surowe TCP bez uzgadniania WebSocket, nie ma typowanych ramek, więc OnBinary dostarcza bajty dokładnie tak, jak zostały odczytane z gniazda. Gdy TCPEndOfFrameScanBuffer ma wartość eofScanNone, każdy odczyt z gniazda wywołuje zdarzenie z tym, co zostało zbuforowane. Gdy ma wartość eofScanLatestBytes lub eofScanAllBytes, strumień jest dzielony według ogranicznika TCPEndOfFrame i dla każdej logicznej ramki wywoływane jest jedno zdarzenie. Parametr Data udostępnia zdekodowane bajty jako TMemoryStream ustawiony na pozycji 0. Należy go odczytać natychmiast, ponieważ strumień jest własnością klienta i staje się nieważny po powrocie z obsługi. Domyślnie NotifyEvents ma wartość neAsynchronous, więc OnBinary jest synchronizowane z wątkiem głównym i można bezpiecznie aktualizować kontrolki interfejsu z poziomu obsługi. Należy przełączyć na neNoSync, jeśli konieczne jest uniknięcie synchronizacji i samodzielne zarządzanie bezpieczeństwem wątkowym.
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;