From 6869188362327972198e3373f2d2e2450b9baedb Mon Sep 17 00:00:00 2001
From: Muzzammil Shahid <muzzammil@xconn.io>
Date: Thu, 21 Mar 2024 13:12:47 +0500
Subject: [PATCH] add example of progressive call results

---
 .../io/crossbar/autobahn/wamp/Session.java    |  1 -
 .../ProgressiveCallResultsExample.java        | 61 +++++++++++++++++++
 2 files changed, 61 insertions(+), 1 deletion(-)
 create mode 100644 demo-gallery/src/main/java/io/crossbar/autobahn/demogallery/ProgressiveCallResultsExample.java

diff --git a/autobahn/src/main/java/io/crossbar/autobahn/wamp/Session.java b/autobahn/src/main/java/io/crossbar/autobahn/wamp/Session.java
index 80f83875..21a1eff8 100644
--- a/autobahn/src/main/java/io/crossbar/autobahn/wamp/Session.java
+++ b/autobahn/src/main/java/io/crossbar/autobahn/wamp/Session.java
@@ -322,7 +322,6 @@ private void onPreSessionMessage(IMessage message) throws Exception {
     private void onMessage(IMessage message) throws Exception {
         if (message instanceof Result) {
             Result msg = (Result) message;
-
             CallRequest request = getOrDefault(mCallRequests, msg.request, null);
             if (request == null) {
                 throw new ProtocolError(String.format(
diff --git a/demo-gallery/src/main/java/io/crossbar/autobahn/demogallery/ProgressiveCallResultsExample.java b/demo-gallery/src/main/java/io/crossbar/autobahn/demogallery/ProgressiveCallResultsExample.java
new file mode 100644
index 00000000..746f2ece
--- /dev/null
+++ b/demo-gallery/src/main/java/io/crossbar/autobahn/demogallery/ProgressiveCallResultsExample.java
@@ -0,0 +1,61 @@
+package io.crossbar.autobahn.demogallery;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+
+import io.crossbar.autobahn.wamp.Client;
+import io.crossbar.autobahn.wamp.Session;
+import io.crossbar.autobahn.wamp.types.CallOptions;
+import io.crossbar.autobahn.wamp.types.CallResult;
+import io.crossbar.autobahn.wamp.types.ExitInfo;
+import io.crossbar.autobahn.wamp.types.InvocationDetails;
+import io.crossbar.autobahn.wamp.types.InvocationResult;
+import io.crossbar.autobahn.wamp.types.Registration;
+
+public class ProgressiveCallResultsExample {
+
+    public static CompletableFuture<ExitInfo> registerProgressive(String wsAddress, String realm) {
+        Session wampSession = new Session();
+        wampSession.addOnJoinListener((session, details) -> {
+            CompletableFuture<Registration> regFuture = session.register(
+                    "io.crossbar.longop",
+                    (List<Object> args, Map<String, Object> kwargs, InvocationDetails invocationDetails) -> {
+                        for (int i = 0; i < 5; i++) {
+                            List<Object> argsList = new ArrayList<>();
+                            argsList.add(i);
+                            invocationDetails.progress.sendProgress(argsList, null);
+                        }
+                        List<Object> resultArgs = new ArrayList<>();
+                        resultArgs.add(7);
+                        return CompletableFuture.completedFuture(new InvocationResult(resultArgs));
+                    });
+
+            regFuture.whenComplete((registration, throwable) -> {
+                System.out.println(String.format(
+                        "Registered procedure %s", registration.procedure));
+            });
+        });
+
+        Client wampClient = new Client(wampSession, wsAddress, realm);
+        return wampClient.connect();
+    }
+
+
+    public static CompletableFuture<ExitInfo> callProgressive(String wsAddress, String realm) {
+        Session wampSession = new Session();
+        wampSession.addOnJoinListener((session, details) -> {
+            CompletableFuture<CallResult> callFuture = session.call(
+                    "io.crossbar.longop",
+                    new CallOptions(result -> System.out.println("Receive Progress: " + result.results)));
+
+            callFuture.whenComplete((callResult, throwable) -> {
+                System.out.println(String.format("Call result: %s", callResult.results));
+            });
+        });
+
+        Client wampClient = new Client(wampSession, wsAddress, realm);
+        return wampClient.connect();
+    }
+}