リモートプロシージャコールが完了するために複数の結果が必要な場合があります。デフォルトでは 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');