Adapt to changes in Argeo TP
[lgpl/argeo-commons.git] / org.argeo.cms.ee / src / org / argeo / cms / websocket / server / EventEndpoint.java
index a6b2a4df75c87a03c501f034f11f84de8243706e..c0dc977547ef3abdda9c51bfe7896013d4de1de1 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 BundleContext bc = FrameworkUtil.getBundle(TestEndpoint.class).getBundleContext();
+       private final static CmsLog log = CmsLog.getLog(EventEndpoint.class);
+       private BundleContext bc = FrameworkUtil.getBundle(EventEndpoint.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);
+       }
 }