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();
@OnClose
public void onClose(@PathParam("topic") String topic) {
- cmsContext.removeEventSubscriber(topic, this);
+ cmsEventBus.removeEventSubscriber(topic, this);
}
@Override
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);
+ }
}