summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/contrib/samples/learning-more/binding-comet/chat-webapp/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-2.x/contrib/samples/learning-more/binding-comet/chat-webapp/src/main/java')
-rw-r--r--sca-java-2.x/contrib/samples/learning-more/binding-comet/chat-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/ChatService.java15
-rw-r--r--sca-java-2.x/contrib/samples/learning-more/binding-comet/chat-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/ChatServiceImpl.java36
2 files changed, 51 insertions, 0 deletions
diff --git a/sca-java-2.x/contrib/samples/learning-more/binding-comet/chat-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/ChatService.java b/sca-java-2.x/contrib/samples/learning-more/binding-comet/chat-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/ChatService.java
new file mode 100644
index 0000000000..4c35e1c5e3
--- /dev/null
+++ b/sca-java-2.x/contrib/samples/learning-more/binding-comet/chat-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/ChatService.java
@@ -0,0 +1,15 @@
+package org.apache.tuscany.sca.sample.comet;
+
+import org.apache.tuscany.sca.binding.comet.runtime.callback.CometCallback;
+import org.oasisopen.sca.annotation.Callback;
+import org.oasisopen.sca.annotation.Remotable;
+
+@Callback(CometCallback.class)
+@Remotable
+public interface ChatService {
+
+ void register();
+
+ void postMessage(String user, String message);
+
+}
diff --git a/sca-java-2.x/contrib/samples/learning-more/binding-comet/chat-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/ChatServiceImpl.java b/sca-java-2.x/contrib/samples/learning-more/binding-comet/chat-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/ChatServiceImpl.java
new file mode 100644
index 0000000000..b58de00035
--- /dev/null
+++ b/sca-java-2.x/contrib/samples/learning-more/binding-comet/chat-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/ChatServiceImpl.java
@@ -0,0 +1,36 @@
+package org.apache.tuscany.sca.sample.comet;
+
+import java.util.ArrayList;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.apache.tuscany.sca.binding.comet.runtime.callback.CometCallback;
+import org.apache.tuscany.sca.binding.comet.runtime.callback.Status;
+import org.oasisopen.sca.ComponentContext;
+import org.oasisopen.sca.annotation.Context;
+import org.oasisopen.sca.annotation.Scope;
+import org.oasisopen.sca.annotation.Service;
+
+@Service(ChatService.class)
+@Scope("COMPOSITE")
+public class ChatServiceImpl implements ChatService {
+
+ @Context
+ protected ComponentContext context;
+
+ private CopyOnWriteArrayList<CometCallback> clients = new CopyOnWriteArrayList<CometCallback>();
+
+ @Override
+ public void postMessage(String user, String message) {
+ for (CometCallback callback : new ArrayList<CometCallback>(clients)) {
+ Status status = callback.sendMessage(user + ": " + message);
+ if (status == Status.CLIENT_DISCONNECTED) {
+ clients.remove(callback);
+ }
+ }
+ }
+
+ @Override
+ public void register() {
+ clients.add(context.getRequestContext().<CometCallback> getCallback());
+ }
+}