public void publish(String topicName, Object data) { // First clone the list of subscriptions Set<MessageListener> listeners; synchronized (subscriptions) { Set<MessageListener> current = subscriptions.get(topicName); if (current == null) { return; } listeners = new HashSet<MessageListener>(); listeners.addAll(current); } // Then tell everyone about the message for (MessageListener listener : listeners) { MessageEvent event; if (data instanceof MessageEvent) { event = (MessageEvent) data; } else { event = new DefaultMessageEvent(this, data); } listener.onMessage(event); } }
/** * Something has published to the client side 'hub' and we're getting to * know about it. * @param topic The topic that has been published to * @param data The published data */ public void publish(String topic, RealRawData data) { WebContext webContext = WebContextFactory.get(); ConverterManager converterManager = webContext.getContainer().getBean(ConverterManager.class); Hub hub = HubFactory.get(); MessageEvent event = new DefaultMessageEvent(hub, converterManager, data); hub.publish(topic, event); }