/** * {@inheritDoc} */ @Override public void onClose(WebSocket webSocket) { AtmosphereResource resource = webSocket.resource(); if (resource != null) { resource.getBroadcaster().removeAtmosphereResource(resource); } }
private void postToSingleResource(Object payload, AtmosphereResource resource) { AtmosphereEvent event = new AtmosphereEvent(payload, resource); ThreadContext.detach(); ThreadContext.setApplication(application); PageKey key; Collection<EventSubscription> subscriptionsForPage; synchronized (this) { key = trackedPages.get(resource.uuid()); subscriptionsForPage = Collections2.filter( Collections.unmodifiableCollection(subscriptions.get(key)), new EventFilter(event)); } if (key == null) broadcaster.removeAtmosphereResource(resource); else if (!subscriptionsForPage.isEmpty()) post(resource, key, subscriptionsForPage, event); }
private void postToSingleResource(Object payload, AtmosphereResource resource) { AtmosphereEvent event = new AtmosphereEvent(payload, resource); ThreadContext.detach(); ThreadContext.setApplication(application); PageKey key; Iterable<EventSubscription> subscriptionsForPage; synchronized (this) { key = trackedPages.get(resource.uuid()); Collection<EventSubscription> eventSubscriptions = subscriptions.get(key); subscriptionsForPage = Iterables.filter(ImmutableList.copyOf(eventSubscriptions), new EventFilter(event)); } if (key == null) getBroadcaster().removeAtmosphereResource(resource); else { Iterator<EventSubscription> iterator = subscriptionsForPage.iterator(); if (iterator.hasNext()) post(resource, key, iterator, event); } }
@Override public void onSuspend(AtmosphereResourceEvent event) { try { if (!trackedUUID.add(resource.uuid())) { return; } // TODO: Document this behavior // Temporary remove the resource from being the target for event, to avoid long-poling loop. event.broadcaster().removeAtmosphereResource(resource); try { invokeOpenOrClose(onOpenMethod, remoteEndpoint); } finally { event.broadcaster().addAtmosphereResource(resource); } } finally { event.getResource().removeEventListener(this); } } });