@Override public void onEvent(TaskEvent event) { if (session.isOpen()) { RemoteEndpoint.Async remote = session.getAsyncRemote(); remote.setSendTimeout(1000); remote.sendObject(event, result -> { if (!result.isOK()) { LOGGER.error(result.getException().toString(), result.getException()); } }); } else { webSocketContext.removeSession(session); } } };
@OnOpen public void onOpen(@PathParam("fileSystemName") String fileSystemName, Session session) { LOGGER.debug("WebSocket session '{}' opened for file system '{}'", session.getId(), fileSystemName); ListenableAppStorage storage = appDataBean.getStorage(fileSystemName); AppStorageListener listener = eventList -> { if (session.isOpen()) { RemoteEndpoint.Async remote = session.getAsyncRemote(); remote.setSendTimeout(1000); remote.sendObject(eventList, result -> { if (!result.isOK()) { LOGGER.error(result.getException().toString(), result.getException()); } }); } else { webSocketContext.removeSession(session); } }; storage.addListener(listener); session.getUserProperties().put("listener", listener); // to prevent weak listener from being garbage collected webSocketContext.addSession(session); }
public JSR356WebSocket(Session session, AtmosphereConfig config) { super(config); this.session = session; this.writeTimeout = config.getInitParameter(ApplicationConfig.WEBSOCKET_WRITE_TIMEOUT, 60 * 1000); session.getAsyncRemote().setSendTimeout(writeTimeout); }