WAMP | RPC İlerleme Sonuçları

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');