@Override public void unsubscribed(final ServerSession session, final ServerChannel channel) { LOG.debug("Cometd channel unsubscribe. session={}, channel={}", session, channel); final List<CometdPushNode<?>> nodes = _nodesByCometdChannelId.remove(channel.getId()); if (nodes != null) for (final CometdPushNode<?> node : nodes) _onDisconnect(node); } });
@ManagedAttribute(value = "The channel names of this server", readonly = true) public Set<String> getChannels() { Set<String> channels = new TreeSet<>(); for (ServerChannel channel : bayeux.getChannels()) { channels.add(channel.getId()); } return channels; }
@Override public void run() { for (SystemTopics topic : SystemTopics.values()) { String topicData; switch (topic) { case Time: topicData = logDateFormat.format(new Date()); break; default: topicData = "unknown topic: " + topic.toString(); } ServerMessage.Mutable message = bayeuxServer.newMessage(); message.setChannel(channels.get(topic.ordinal()).getId()); message.setData(topicData); channels.get(topic.ordinal()).publish(session, message); } } }
private void isPublishAuthorized(ServerChannel channel, ServerSession session, ServerMessage message, Promise<Authorizer.Result> promise) { if (_policy != null) { _policy.canPublish(this, session, channel, message, Promise.from(can -> { if (can == null || can) { isOperationAuthorized(Authorizer.Operation.PUBLISH, session, message, channel.getChannelId(), promise); } else { _logger.info("{} denied publish on channel {} by {}", session, channel.getId(), _policy); promise.succeed(Authorizer.Result.deny("denied_by_security_policy")); } }, promise::fail)); } else { isOperationAuthorized(Authorizer.Operation.PUBLISH, session, message, channel.getChannelId(), promise); } }