クライアントがバイナリメッセージを受信すると、OnBinary イベントが発火します。受信したバイナリメッセージを取得するには Data パラメータを読み取ります。
procedure OnBinary(Connection: TsgcWSConnection; const Data: TMemoryStream);
var
oBitmap: TBitmap;
begin
oBitmap := TBitmap.Create;
Try
oBitmap.LoadFromStream(Data);
Image1.Picture.Assign(oBitmap);
Log(
'#image uncompressed size: ' + IntToStr(Data.Size) +
'. Total received: ' + IntToStr(Connection.RecBytes));
Finally
FreeAndNil(oBitmap);
End;
end;
デフォルトでは、クライアントは neAsynchronous メソッドを使用して OnMessage イベントをディスパッチします。つまり、このイベントはメインスレッドのコンテキストで実行されるため、例えばフォームのコントロールを更新することがスレッドセーフです。
多くのメッセージを受信する場合、または他のスレッドとの同期を制御する必要がある場合は、NotifyEvents プロパティを neNoSync に設定します。これにより OnMessage イベントは接続スレッドのコンテキストで実行されるため、フォームのコントロールを更新したり共有オブジェクトにアクセスしたりする場合は、独自の同期メソッドを実装する必要があります。