]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms.ee/src/org/argeo/cms/websocket/server/EventEndpoint.java
Merge remote-tracking branch 'origin/unstable' into merge-to-testing
[lgpl/argeo-commons.git] / org.argeo.cms.ee / src / org / argeo / cms / websocket / server / EventEndpoint.java
index a6b2a4df75c87a03c501f034f11f84de8243706e..defc59efcadf1e49926f373fe97781eecdf4c89e 100644 (file)
@@ -1,34 +1,38 @@
 package org.argeo.cms.websocket.server;
 
 import java.io.IOException;
+import java.nio.channels.ClosedChannelException;
 import java.util.Map;
 
 import javax.websocket.OnClose;
+import javax.websocket.OnError;
 import javax.websocket.OnOpen;
 import javax.websocket.RemoteEndpoint;
 import javax.websocket.Session;
 import javax.websocket.server.PathParam;
 import javax.websocket.server.ServerEndpoint;
 
-import org.argeo.api.cms.CmsContext;
+import org.argeo.api.cms.CmsEventBus;
 import org.argeo.api.cms.CmsEventSubscriber;
+import org.argeo.api.cms.CmsLog;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.FrameworkUtil;
 
-@ServerEndpoint(value = "/event/{topic}", configurator = CmsWebSocketConfigurator.class)
+@ServerEndpoint(value = "/cms/status/event/{topic}", configurator = CmsWebSocketConfigurator.class)
 public class EventEndpoint implements CmsEventSubscriber {
+       private final static CmsLog log = CmsLog.getLog(EventEndpoint.class);
        private BundleContext bc = FrameworkUtil.getBundle(TestEndpoint.class).getBundleContext();
 
        private RemoteEndpoint.Basic remote;
-       private CmsContext cmsContext;
+       private CmsEventBus cmsEventBus;
 
 //     private String topic = "cms";
 
        @OnOpen
        public void onOpen(Session session, @PathParam("topic") String topic) {
                if (bc != null) {
-                       cmsContext = bc.getService(bc.getServiceReference(CmsContext.class));
-                       cmsContext.addEventSubscriber(topic, this);
+                       cmsEventBus = bc.getService(bc.getServiceReference(CmsEventBus.class));
+                       cmsEventBus.addEventSubscriber(topic, this);
                }
                remote = session.getBasicRemote();
 
@@ -36,7 +40,7 @@ public class EventEndpoint implements CmsEventSubscriber {
 
        @OnClose
        public void onClose(@PathParam("topic") String topic) {
-               cmsContext.removeEventSubscriber(topic, this);
+               cmsEventBus.removeEventSubscriber(topic, this);
        }
 
        @Override
@@ -47,4 +51,13 @@ public class EventEndpoint implements CmsEventSubscriber {
                        throw new IllegalStateException(e);
                }
        }
+
+       @OnError
+       public void onError(Throwable e) {
+               if (e instanceof ClosedChannelException) {
+                       // ignore, as it probably means ping was closed on the other side
+                       return;
+               }
+               log.error("Cannot process ping", e);
+       }
 }