@RequestMapping(value = "/user-notifications/{userId}") @ResponseStatus(HttpStatus.OK) @ResponseBody public void watch(@PathVariable("userId") String userId, HttpServletRequest request) throws Exception { //Atmosphere framework puts filter/servlet that adds ATMOSPHERE_RESOURCE to all requests AtmosphereResource resource = (AtmosphereResource)request.getAttribute(ApplicationConfig.ATMOSPHERE_RESOURCE); //suspending resource to keep connection resource.suspend(); //find broadcaster, second parameter says to create broadcaster if it doesn't exist Broadcaster broadcaster = BroadcasterFactory.getDefault().lookup(userId,true); //saving resource for notifications broadcaster.addAtmosphereResource(resource); }
protected void schedule(AtmosphereResource r, String uuid) { heartbeat.addAtmosphereResource(r).scheduleFixedBroadcast("heartbeat-" + uuid, 60, 60, TimeUnit.SECONDS); }
@RequestMapping(value="/subscribe", method=RequestMethod.POST) public ResponseEntity<HttpStatus> addSubscription(AtmosphereResource resource, @RequestParam("topic") String topic) { String atmosphereId = resource.getResponse().getHeader(ATMOSPHERE_TRACKING_ID); if (atmosphereId == null || atmosphereId.isEmpty()) { log.error("Cannot add subscription, as the atmosphere tracking ID was not found"); return new ResponseEntity<HttpStatus>(HttpStatus.BAD_REQUEST); } AtmosphereResource originalResource = resourceFactory.find(atmosphereId); if (originalResource == null) { log.error("The provided Atmosphere tracking ID is not associated to a known resource"); return new ResponseEntity<HttpStatus>(HttpStatus.BAD_REQUEST); } Broadcaster broadcaster = broadcasterFactory.lookup(topic, true); broadcaster.addAtmosphereResource(originalResource); log.info("Added subscription to {} for atmosphere resource {}",topic, atmosphereId); return getOkResponse(); }
bc.addAtmosphereResource(resource);
@Override public void onSuspend(AtmosphereResource resource) { AtmosphereRequest req = resource.getRequest(); String when = req.getParameter("when"); if (when.equals("open")) { resource.resume(); onOpen(); } else if (when.equals("poll")) { this.broadcaster.addAtmosphereResource(resource); retrieveCache(req.getParameter("lastEventIds")); } }
public AtmosphereSocket(AtmosphereResource resource) { this.params = params(resource.getRequest().getParameterMap()); this.broadcaster = broadcasterFactory().get(id()).addAtmosphereResource(resource); }
@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); } } });