diff options
author | fmoga <fmoga@13f79535-47bb-0310-9956-ffa450edef68> | 2011-05-24 14:27:45 +0000 |
---|---|---|
committer | fmoga <fmoga@13f79535-47bb-0310-9956-ffa450edef68> | 2011-05-24 14:27:45 +0000 |
commit | e03b437442335d33ad52d31a750701933fb021d0 (patch) | |
tree | 7d77a8472ff525a2cbe2a05f91a5e85732f3f2e9 /sca-java-2.x/trunk/modules/binding-comet-runtime/src/main/java/org/apache/tuscany/sca/binding/comet/runtime/CometInvoker.java | |
parent | 17fb39cd0fe95baff5453bd12b2dab14d6018efc (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.java | 36 |
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; } - } |