WAMP | RPC プログレス結果

リモートプロシージャコールが完了するために複数の結果が必要な場合があります。デフォルトでは WAMP 1.0 プロトコルは呼び出しで部分的な結果を許可しませんが、これは sgcWebSockets ライブラリの専用機能です。

フローは単純な RPC と非常に似ていますが、ここでは CallResult が呼び出されてプロセスが終了する前に 1 つ以上の部分的な結果があります。

基本的に、クライアントはサーバーにプロシージャをリクエストし、サーバーは結果またはエラーを送信できます。結果を送信する場合、それが最終結果であるか、後でさらに結果を送信する必要があります。最終結果の場合、CallResult メソッドを呼び出してプロセスが終了します。送信する結果がさらにある場合は、CallProgressResult メソッドを呼び出します。

 

使用例: クライアントがサーバーに1秒ごとにサーバー時刻を受信し、20件のメッセージの後に停止するメソッドをリクエストします。

 

WAMP サーバー

 


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 クライアント

 


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