summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/contrib/samples/learning-more/binding-comet/chat-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/ChatServiceImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-2.x/contrib/samples/learning-more/binding-comet/chat-webapp/src/main/java/org/apache/tuscany/sca/sample/comet/ChatServiceImpl.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/ChatServiceImpl.java36
1 files changed, 36 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/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());
+ }
+}