diff options
Diffstat (limited to 'sca-java-2.x/contrib/samples/learning-more/binding-comet/chat-webapp/src/main/java')
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()); + } +} |