summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/CometInvoker.java
diff options
context:
space:
mode:
authorfmoga <fmoga@13f79535-47bb-0310-9956-ffa450edef68>2011-05-24 14:27:45 +0000
committerfmoga <fmoga@13f79535-47bb-0310-9956-ffa450edef68>2011-05-24 14:27:45 +0000
commite03b437442335d33ad52d31a750701933fb021d0 (patch)
tree7d77a8472ff525a2cbe2a05f91a5e85732f3f2e9 /sca-java-2.x/trunk/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/CometInvoker.java
parent17fb39cd0fe95baff5453bd12b2dab14d6018efc (diff)
Improve comet support. Add status to callback return type to determine when browser client has closed the page. Upgrade to atmosphere-jquery-0.7.1. Add support for multiple tabs. Fix and improve reliability of long polling technique.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1127080 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/trunk/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/CometInvoker.java')
-rw-r--r--sca-java-2.x/trunk/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/CometInvoker.java36
1 files changed, 24 insertions, 12 deletions
diff --git a/sca-java-2.x/trunk/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/CometInvoker.java b/sca-java-2.x/trunk/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/CometInvoker.java
index 5e6375480e..99eb30892e 100644
--- a/sca-java-2.x/trunk/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/CometInvoker.java
+++ b/sca-java-2.x/trunk/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/CometInvoker.java
@@ -20,11 +20,13 @@
package org.apache.tuscany.sca.binding.comet.runtime;
import org.apache.tuscany.sca.assembly.EndpointReference;
-import org.apache.tuscany.sca.binding.comet.runtime.handler.CometBindingHandler;
+import org.apache.tuscany.sca.binding.comet.runtime.callback.Status;
+import org.apache.tuscany.sca.core.invocation.Constants;
import org.apache.tuscany.sca.core.invocation.impl.MessageImpl;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.invocation.Invoker;
import org.apache.tuscany.sca.invocation.Message;
+import org.atmosphere.cpr.Broadcaster;
public class CometInvoker implements Invoker {
@@ -38,18 +40,28 @@ public class CometInvoker implements Invoker {
@Override
public Message invoke(final Message msg) {
- String operation = msg.getOperation().getName();
- CometMessageContext context = msg.getBindingContext();
- CometBindingHandler handler = context.getCometHandler();
- Message message = new MessageImpl();
- if (operation.equals("sendResponse")) {
- String callbackMethod = context.getCallbackMethod();
+ return handleSendMessage(msg);
+ }
+
+ private Message handleSendMessage(Message msg) {
+ String sessionId = (String) msg.getHeaders().get(Constants.RELATES_TO);
+ Broadcaster broadcaster = CometComponentContext.broadcasters.get(sessionId);
+ Message response = new MessageImpl();
+ if (broadcaster == null) {
+ System.out.println("Broadcaster already removed.");
+ response.setBody(Status.CLIENT_DISCONNECTED);
+ } else if (broadcaster.getAtmosphereResources().isEmpty()) {
+ System.out.println("Removing broadcaster " + sessionId + "...");
+ CometComponentContext.broadcasters.remove(sessionId);
+ response.setBody(Status.CLIENT_DISCONNECTED);
+ } else {
+ System.out.println("Using broadcaster " + sessionId + "...");
+ String callbackMethod = msg.getTo().getURI();
Object[] body = msg.getBody();
- handler.respondToClient(callbackMethod, body[0]);
- } else if (operation.equals("isClientConnected")) {
- message.setBody(handler.isClientConnected());
+ broadcaster.broadcast(callbackMethod + "($.secureEvalJSON('" + CometComponentContext.gson.toJson(body[0])
+ + "'))");
+ response.setBody(Status.OK);
}
- return message;
+ return response;
}
-
}