RPC Aşamalı Sonuçlar

· Özellikler

WAMP 1.0, iki eşzamansız mesajlaşma deseni sağlayan açık bir WebSocket alt protokolüdür: RPC ve PubSub.

sgcWebSockets 4.3.8 sürümünden itibaren, WAMP 1.0 spesifikasyonunda yer almayan ancak kullanıcılarımız için çok yararlı olabilecek yeni bir metot desteklenir. WAMP, RPC çağrılarına izin verir, ancak sunucu yanıtı yalnızca başarılı olabilir ya da olmayabilir. Bazen bir RPC birden fazla sonuç gerektirir (haber akışı, fiyatlar, ilerleme gösterme...) ve burada spesifikasyon buna izin vermez (WAMP 2.0 izin verir ancak çok daha karmaşıktır).

Bu nedenle, sgcWebSockets 4.3.8 sürümünden itibaren birden fazla sonuçlu RPC kullanılabilir.

Temelde önceki RPC ile aynı şekilde çalışır, ancak istemci tarafında OnCallProgressResult adlı yeni bir olay vardır; bu olay, sunucu kısmi bir sonuç gönderdiğinde ve hâlâ alınacak daha fazla sonuç olduğunda tetiklenir. Aynı zamanda sunucunun, istemciye kısmi bir sonuç göndermek için çağrılan CallProgressResult adlı yeni bir metodu vardır. 

İstemci, CancelCall adlı yeni metodu kullanarak ve CallId değerini parametre olarak geçirerek etkin bir RPC çağrısını iptal edebilir.

Sunucu Örneği 

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; 

İstemci Örneği 

procedure OnCallResultClient(Connection: TsgcWSConnection; CallId, Result: string);
begin
  // This is the last result
  ShowMessage(Result);
end;
procedure OnCallProgressResultClient(Connection: TsgcWSConnection; CallId, Result: string);
begin
  // Partial result, there are still more results to receive
  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('GetProgressiveTime');