Author: fmoga
Date: Mon Jul 25 08:34:41 2011
New Revision: 1150577

URL: http://svn.apache.org/viewvc?rev=1150577&view=rev
Log:
Add multiple response support to binding.websocket.

Added:
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/TuscanyWebsocket.java
      - copied, changed from r1150357, 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/TuscanyWebSocket.java
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketBindingCallback.java
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketBindingDispatcher.java
      - copied, changed from r1150357, 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebSocketBindingDispatcher.java
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketBindingMessage.java
      - copied, changed from r1150357, 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebSocketBindingMessage.java
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketCallbackInvoker.java
      - copied, changed from r1150357, 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceInvoker.java
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketConnectionManager.java
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServer.java
      - copied, changed from r1150357, 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebSocketServer.java
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketStatus.java
Removed:
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/TuscanyWebSocket.java
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebSocketBindingDispatcher.java
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebSocketBindingMessage.java
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebSocketServer.java
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceInvoker.java
Modified:
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/JSONUtil.java
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceBindingProvider.java
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceBindingProvider.java
    
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceInvoker.java

Modified: 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/JSONUtil.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/JSONUtil.java?rev=1150577&r1=1150576&r2=1150577&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/JSONUtil.java
 (original)
+++ 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/JSONUtil.java
 Mon Jul 25 08:34:41 2011
@@ -33,12 +33,12 @@ public class JSONUtil {
 
     private static Gson gson = new Gson();
 
-    public static String encodeMessage(WebSocketBindingMessage request) {
+    public static String encodeMessage(WebsocketBindingMessage request) {
         return gson.toJson(request);
     }
 
-    public static WebSocketBindingMessage decodeMessage(String jsonRequest) {
-        return gson.fromJson(jsonRequest, WebSocketBindingMessage.class);
+    public static WebsocketBindingMessage decodeMessage(String jsonRequest) {
+        return gson.fromJson(jsonRequest, WebsocketBindingMessage.class);
     }
 
     public static String encodePayload(Object payload) {

Copied: 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/TuscanyWebsocket.java
 (from r1150357, 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/TuscanyWebSocket.java)
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/TuscanyWebsocket.java?p2=tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/TuscanyWebsocket.java&p1=tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/TuscanyWebSocket.java&r1=1150357&r2=1150577&rev=1150577&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/TuscanyWebSocket.java
 (original)
+++ 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/TuscanyWebsocket.java
 Mon Jul 25 08:34:41 2011
@@ -20,42 +20,60 @@
 package org.apache.tuscany.sca.binding.websocket.runtime;
 
 import java.io.IOException;
+import java.util.UUID;
 
 import org.eclipse.jetty.websocket.WebSocket;
 
-public class TuscanyWebSocket implements WebSocket, WebSocket.OnTextMessage {
+public class TuscanyWebsocket implements WebSocket, WebSocket.OnTextMessage {
 
+    private String id;
     private Connection connection;
-    private WebSocketBindingDispatcher dispatcher;
+    private WebsocketBindingDispatcher dispatcher;
 
-    public TuscanyWebSocket(WebSocketBindingDispatcher dispatcher) {
+    public TuscanyWebsocket(WebsocketBindingDispatcher dispatcher) {
         this.dispatcher = dispatcher;
     }
 
     @Override
     public void onOpen(Connection connection) {
         this.connection = connection;
+        this.id = UUID.randomUUID().toString();
+        WebsocketConnectionManager.addConnection(this);
     }
 
     @Override
     public void onMessage(String jsonRequest) {
-        WebSocketBindingMessage request = JSONUtil.decodeMessage(jsonRequest);
+        WebsocketBindingMessage request = JSONUtil.decodeMessage(jsonRequest);
         WebsocketServiceInvoker invoker = 
dispatcher.dispatch(request.getOperation());
         if (invoker == null) {
             throw new RuntimeException("No operation found for " + 
request.getOperation());
         } else {
-            WebSocketBindingMessage response = invoker.invokeSync(request);
-            String jsonResponse = JSONUtil.encodeMessage(response);
-            try {
-                connection.sendMessage(jsonResponse);
-            } catch (IOException e) {
-                throw new RuntimeException(e);
+            if (!invoker.isNonBlocking()) {
+                WebsocketBindingMessage response = invoker.invokeSync(request);
+                send(response);
+            } else {
+                invoker.invokeAsync(request, this);
             }
         }
     }
 
     @Override
     public void onClose(int closeCode, String message) {
+        WebsocketConnectionManager.removeConnection(this);
+    }
+
+    public void send(WebsocketBindingMessage message) {
+        try {
+            if (connection.isOpen()) {
+                connection.sendMessage(JSONUtil.encodeMessage(message));
+            }
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public String getId() {
+        return id;
     }
 
 }

Added: 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketBindingCallback.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketBindingCallback.java?rev=1150577&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketBindingCallback.java
 (added)
+++ 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketBindingCallback.java
 Mon Jul 25 08:34:41 2011
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.tuscany.sca.binding.websocket.runtime;
+
+import org.oasisopen.sca.annotation.Remotable;
+
+@Remotable
+public interface WebsocketBindingCallback {
+
+    public WebsocketStatus sendMessage(Object message);
+
+}

Copied: 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketBindingDispatcher.java
 (from r1150357, 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebSocketBindingDispatcher.java)
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketBindingDispatcher.java?p2=tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketBindingDispatcher.java&p1=tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebSocketBindingDispatcher.java&r1=1150357&r2=1150577&rev=1150577&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebSocketBindingDispatcher.java
 (original)
+++ 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketBindingDispatcher.java
 Mon Jul 25 08:34:41 2011
@@ -24,7 +24,7 @@ import java.util.Map;
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
 
-public class WebSocketBindingDispatcher {
+public class WebsocketBindingDispatcher {
 
     private Map<String, WebsocketServiceInvoker> invokers = new 
HashMap<String, WebsocketServiceInvoker>();
 

Copied: 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketBindingMessage.java
 (from r1150357, 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebSocketBindingMessage.java)
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketBindingMessage.java?p2=tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketBindingMessage.java&p1=tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebSocketBindingMessage.java&r1=1150357&r2=1150577&rev=1150577&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebSocketBindingMessage.java
 (original)
+++ 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketBindingMessage.java
 Mon Jul 25 08:34:41 2011
@@ -18,12 +18,12 @@
  */
 package org.apache.tuscany.sca.binding.websocket.runtime;
 
-public class WebSocketBindingMessage {
+public class WebsocketBindingMessage {
 
     private String operation;
     private String payload;
 
-    public WebSocketBindingMessage(String operation, String payload) {
+    public WebsocketBindingMessage(String operation, String payload) {
         this.operation = operation;
         this.payload = payload;
     }

Copied: 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketCallbackInvoker.java
 (from r1150357, 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceInvoker.java)
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketCallbackInvoker.java?p2=tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketCallbackInvoker.java&p1=tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceInvoker.java&r1=1150357&r2=1150577&rev=1150577&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceInvoker.java
 (original)
+++ 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketCallbackInvoker.java
 Mon Jul 25 08:34:41 2011
@@ -20,22 +20,36 @@
 package org.apache.tuscany.sca.binding.websocket.runtime;
 
 import org.apache.tuscany.sca.assembly.EndpointReference;
+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;
 
-public class WebsocketReferenceInvoker implements Invoker {
+public class WebsocketCallbackInvoker implements Invoker {
 
     protected Operation operation;
     protected EndpointReference endpoint;
 
-    public WebsocketReferenceInvoker(Operation operation, EndpointReference 
endpoint) {
+    public WebsocketCallbackInvoker(Operation operation, EndpointReference 
endpoint) {
         this.operation = operation;
         this.endpoint = endpoint;
     }
 
     public Message invoke(Message msg) {
-        throw new RuntimeException("Not implemented yet");
+        String channelId = (String) msg.getHeaders().get(Constants.RELATES_TO);
+        TuscanyWebsocket websocket = 
WebsocketConnectionManager.getConnection(channelId);
+        Message response = new MessageImpl();
+        if (websocket == null) {
+            response.setBody(WebsocketStatus.CLOSED);
+        } else {
+            Object[] body = msg.getBody();
+            String payload = JSONUtil.encodePayload(body[0]);
+            String operation = msg.getTo().getURI();
+            WebsocketBindingMessage message = new 
WebsocketBindingMessage(operation, payload);
+            websocket.send(message);
+            response.setBody(WebsocketStatus.OPEN);
+        }
+        return response;
     }
-
 }

Added: 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketConnectionManager.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketConnectionManager.java?rev=1150577&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketConnectionManager.java
 (added)
+++ 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketConnectionManager.java
 Mon Jul 25 08:34:41 2011
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.binding.websocket.runtime;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+public class WebsocketConnectionManager {
+
+    private static ConcurrentMap<String, TuscanyWebsocket> activeConnections = 
new ConcurrentHashMap<String, TuscanyWebsocket>();
+
+    public static void addConnection(TuscanyWebsocket websocket) {
+        activeConnections.put(websocket.getId(), websocket);
+    }
+
+    public static void removeConnection(TuscanyWebsocket websocket) {
+        activeConnections.remove(websocket.getId());
+    }
+
+    public static TuscanyWebsocket getConnection(String id) {
+        return activeConnections.get(id);
+    }
+
+    public static void clear() {
+        activeConnections.clear();
+    }
+
+    private WebsocketConnectionManager() {
+    }
+
+}

Modified: 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceBindingProvider.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceBindingProvider.java?rev=1150577&r1=1150576&r2=1150577&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceBindingProvider.java
 (original)
+++ 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketReferenceBindingProvider.java
 Mon Jul 25 08:34:41 2011
@@ -34,7 +34,7 @@ public class WebsocketReferenceBindingPr
     }
 
     public Invoker createInvoker(Operation operation) {
-        return new WebsocketReferenceInvoker(operation, endpoint);
+        return new WebsocketCallbackInvoker(operation, endpoint);
     }
 
     public void start() {

Copied: 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServer.java
 (from r1150357, 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebSocketServer.java)
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServer.java?p2=tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServer.java&p1=tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebSocketServer.java&r1=1150357&r2=1150577&rev=1150577&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebSocketServer.java
 (original)
+++ 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServer.java
 Mon Jul 25 08:34:41 2011
@@ -28,11 +28,11 @@ import org.eclipse.jetty.server.nio.Sele
 import org.eclipse.jetty.websocket.WebSocket;
 import org.eclipse.jetty.websocket.WebSocketHandler;
 
-public class WebSocketServer extends Server {
+public class WebsocketServer extends Server {
 
-    private WebSocketBindingDispatcher dispatcher;
+    private WebsocketBindingDispatcher dispatcher;
 
-    public WebSocketServer(int port) throws URISyntaxException {
+    public WebsocketServer(int port) throws URISyntaxException {
         SelectChannelConnector connector = new SelectChannelConnector();
         connector.setPort(port);
         addConnector(connector);
@@ -41,15 +41,14 @@ public class WebSocketServer extends Ser
 
             @Override
             public WebSocket doWebSocketConnect(HttpServletRequest request, 
String protocol) {
-                System.out.println("Connection established");
-                return new TuscanyWebSocket(dispatcher);
+                return new TuscanyWebsocket(dispatcher);
             }
         });
 
-        dispatcher = new WebSocketBindingDispatcher();
+        dispatcher = new WebsocketBindingDispatcher();
     }
 
-    public WebSocketBindingDispatcher getDispatcher() {
+    public WebsocketBindingDispatcher getDispatcher() {
         return dispatcher;
     }
 

Modified: 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceBindingProvider.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceBindingProvider.java?rev=1150577&r1=1150576&r2=1150577&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceBindingProvider.java
 (original)
+++ 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceBindingProvider.java
 Mon Jul 25 08:34:41 2011
@@ -33,7 +33,7 @@ public class WebsocketServiceBindingProv
 
     private static final int DEFAULT_PORT = 9000;
     private static final String JAVASCRIPT_RESOURCE_PATH = 
"/org.apache.tuscany.sca.WebsocketComponentContext.js";
-    private static Map<Integer, WebSocketServer> servers = new 
HashMap<Integer, WebSocketServer>();
+    private static Map<Integer, WebsocketServer> servers = new 
HashMap<Integer, WebsocketServer>();
     private RuntimeEndpoint endpoint;
     private ServletHost servletHost;
 
@@ -49,7 +49,7 @@ public class WebsocketServiceBindingProv
             port = Integer.parseInt(binding.getPort());
         }
         try {
-            WebSocketServer server = initServerForURI(port);
+            WebsocketServer server = initServerForURI(port);
             String component = endpoint.getComponent().getName();
             String service = endpoint.getService().getName();
             for (Operation op : 
getBindingInterfaceContract().getInterface().getOperations()) {
@@ -64,10 +64,10 @@ public class WebsocketServiceBindingProv
         initJavascriptResource();
     }
 
-    private WebSocketServer initServerForURI(int port) throws Exception {
-        WebSocketServer server = servers.get(port);
+    private WebsocketServer initServerForURI(int port) throws Exception {
+        WebsocketServer server = servers.get(port);
         if (server == null) {
-            server = new WebSocketServer(port);
+            server = new WebsocketServer(port);
             server.start();
             servers.put(port, server);
         }
@@ -82,7 +82,7 @@ public class WebsocketServiceBindingProv
     }
 
     public void stop() {
-        for (WebSocketServer server : servers.values()) {
+        for (WebsocketServer server : servers.values()) {
             try {
                 server.stop();
             } catch (Exception e) {
@@ -92,6 +92,7 @@ public class WebsocketServiceBindingProv
         servers.clear();
         servletHost.removeServletMapping(JAVASCRIPT_RESOURCE_PATH);
         JavascriptGenerator.clear();
+        WebsocketConnectionManager.clear();
     }
 
     public InterfaceContract getBindingInterfaceContract() {

Modified: 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceInvoker.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceInvoker.java?rev=1150577&r1=1150576&r2=1150577&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceInvoker.java
 (original)
+++ 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceInvoker.java
 Mon Jul 25 08:34:41 2011
@@ -40,7 +40,13 @@ package org.apache.tuscany.sca.binding.w
 
 import java.lang.reflect.InvocationTargetException;
 
+import org.apache.tuscany.sca.assembly.EndpointReference;
+import org.apache.tuscany.sca.core.assembly.impl.RuntimeEndpointImpl;
+import org.apache.tuscany.sca.core.assembly.impl.RuntimeEndpointReferenceImpl;
+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.Message;
 import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
 
 public class WebsocketServiceInvoker {
@@ -53,21 +59,35 @@ public class WebsocketServiceInvoker {
         this.endpoint = endpoint;
     }
 
-    public WebSocketBindingMessage invokeSync(WebSocketBindingMessage request) 
{
+    public WebsocketBindingMessage invokeSync(WebsocketBindingMessage request) 
{
         String jsonParams = request.getPayload();
         Object[] args = JSONUtil.decodePayloadForOperation(jsonParams, 
operation);
         try {
             Object operationResponse = endpoint.invoke(operation, args);
             String payload = JSONUtil.encodePayload(operationResponse);
-            WebSocketBindingMessage response = new 
WebSocketBindingMessage(request.getOperation(), payload);
+            WebsocketBindingMessage response = new 
WebsocketBindingMessage(request.getOperation(), payload);
             return response;
         } catch (InvocationTargetException e) {
             throw new RuntimeException(e);
         }
     }
 
-    public void invokeAsync(WebSocketBindingMessage request, TuscanyWebSocket 
channel) {
-        // TODO add multiple response support
+    public void invokeAsync(WebsocketBindingMessage request, TuscanyWebsocket 
channel) {
+        String jsonParams = request.getPayload();
+        Object[] args = JSONUtil.decodePayloadForOperation(jsonParams, 
operation);
+        Message msg = new MessageImpl();
+        msg.getHeaders().put(Constants.MESSAGE_ID, channel.getId());
+        msg.setBody(args);
+        EndpointReference re = new RuntimeEndpointReferenceImpl();
+        RuntimeEndpointImpl callbackEndpoint = new RuntimeEndpointImpl();
+        callbackEndpoint.setURI(request.getOperation());
+        re.setCallbackEndpoint(callbackEndpoint);
+        msg.setFrom(re);
+        endpoint.invoke(operation, msg);
+    }
+
+    public boolean isNonBlocking() {
+        return operation.isNonBlocking();
     }
 
 }

Added: 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketStatus.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketStatus.java?rev=1150577&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketStatus.java
 (added)
+++ 
tuscany/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketStatus.java
 Mon Jul 25 08:34:41 2011
@@ -0,0 +1,5 @@
+package org.apache.tuscany.sca.binding.websocket.runtime;
+
+public enum WebsocketStatus {
+    OPEN, CLOSED
+}


Reply via email to