Soms vereisen Remote Procedure Calls meer dan één resultaat om verzoeken af te ronden. Standaard staat het WAMP 1.0-protocol geen gedeeltelijke resultaten toe in een aanroep; dit is een functie die exclusief is voor de sgcWebSockets-bibliotheek.
De stroom lijkt sterk op een eenvoudige RPC, maar hier zijn er één of meer gedeeltelijke resultaten voordat CallResult wordt aangeroepen om het proces af te ronden.
In principe vraagt een client een procedure op bij de server, en de server kan een resultaat of een fout terugsturen. Als het een resultaat stuurt, kan dit het uiteindelijke resultaat zijn of moet het later meer resultaten sturen. Als het het uiteindelijke resultaat is, wordt de methode CallResult aangeroepen en is het proces afgerond. Als er meer resultaten te sturen zijn, wordt de methode CallProgressResult aangeroepen.
Voorbeeld: client vraagt server een methode om elke seconde de servertijd te ontvangen en na 20 berichten te stoppen.
WAMP Server
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');