summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceInvoker.java
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceInvoker.java')
-rw-r--r--sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceInvoker.java38
1 files changed, 28 insertions, 10 deletions
diff --git a/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceInvoker.java b/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceInvoker.java
index 410312a538..e7022e273a 100644
--- a/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceInvoker.java
+++ b/sca-java-2.x/contrib/modules/binding-websocket/src/main/java/org/apache/tuscany/sca/binding/websocket/runtime/WebsocketServiceInvoker.java
@@ -19,22 +19,40 @@
package org.apache.tuscany.sca.binding.websocket.runtime;
-import org.apache.tuscany.sca.invocation.Message;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.nio.channels.SocketChannel;
+
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
+import org.apache.websocket.WebSocket;
-public class WebsocketServiceInvoker {
+public class WebsocketServiceInvoker implements Runnable {
private RuntimeEndpoint wire;
-
- public WebsocketServiceInvoker(RuntimeEndpoint wire) {
+ private Operation operation;
+ private WebSocket<SocketChannel> websocket;
+
+ public WebsocketServiceInvoker(RuntimeEndpoint wire, Operation operation, WebSocket<SocketChannel> websocket) {
this.wire = wire;
+ this.operation = operation;
+ this.websocket = websocket;
}
- /**
- * Send the request down the wire to invoke the service
- */
- public Message invokeService(Message msg) {
- return wire.invoke(msg);
+ @Override
+ public void run() {
+ try {
+ String jsonParams = websocket.receiveText();
+ Object[] args = JSONUtil.decodeJsonParamsForOperation(jsonParams, operation);
+ Object response = wire.invoke(operation, args);
+ String jsonResponse = JSONUtil.encodeResponse(response);
+ websocket.sendText(jsonResponse);
+ websocket.close();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ } catch (InvocationTargetException e) {
+ throw new RuntimeException(e);
+ }
}
-
+
}