Bazen, Uzak Yordam Çağrıları istekleri tamamlamak için birden fazla sonuç gerektirir, varsayılan olarak WAMP 1.0 protokolü bir çağrıda Kısmi sonuçlara izin vermez, bu yalnızca sgcWebSockets kütüphanesine özgü bir özelliktir.
Akış, basit bir RPC'ye çok benzer, ancak burada işlemi bitirmek için CallResult çağrılmadan önce 1 veya daha fazla kısmi sonuç vardır.
Temel olarak, bir istemci sunucudan bir prosedür ister ve sunucu bir sonuç veya bir hata gönderebilir. Bir sonuç gönderirse, bu nihai sonuç olabilir veya daha sonra daha fazla sonuç göndermesi gerekir. Nihai sonuçsa, CallResult yöntemini çağırır ve işlem tamamlanır. Gönderilecek daha fazla sonuç varsa, CallProgressResult yöntemini çağırır.
Örnek: istemci, sunucudan her saniye sunucu saatini alıp 20 mesajdan sonra durması için bir yöntem ister.
WAMP Sunucusu
procedure OnServerCall(Connection: TsgcWSConnection; const CallId, ProcUri, Arguments: string); var vNum: Integer; begin if ProcUri = 'GetProgressiveTime' then begin vNum := StrToInt(Arguments); for i := 1 to vNum do begin if i = 20 then oServerWAMP.CallResult(CallId, FormatDateTime('yyyymmdd hh:nn:ss', Now)) else oServerWAMP.CallProgressiveResult(CallId, FormatDateTime('yyyymmdd hh:nn:ss', Now)); end end else oServer.WAMP.CallError(CallId, 'Unknown method'); end;oServer := TsgcWebSocketServer.Create(nil); oServer.Port := 80; oServerWAMP := TsgcWSPServer_WAMP.Create(nil); oServerWAMP.OnCall := OnServerCallEvent; oServerWAMP.Server := oServer; oServer.Active := True;
WAMP Client
procedure OnCallResultClient(Connection: TsgcWSConnection; CallId, Result: string); begin ShowMessage(Result); end;procedure OnCallProgressResultClient(Connection: TsgcWSConnection; CallId, Result: string); begin ShowMessage(Result); end;procedure OnCallErrorClient(Connection: TsgcWSConnection; const Error: string); begin ShowMessage(Error); end;oClient := TsgcWebSocketClient.Create(nil); oClient.Host := '127.0.0.1'; oClient.Port := 80; oClientWAMP := TsgcWSPClient_WAMP.Create(nil); oClientWAMP.OnCallResult := OnCallResultClient; oClientWAMP.OnCallProgressResult := OnCallProgressResultClient; oClientWAMP.OnCallError := OnCallErrorClient; oClientWAMP.Client := oClient; oClient.Active := True; // After client has connected, request GetTime from server oClientWAMP.Call('GetProgressTime');