Example usage for org.springframework.web.servlet.mvc.method.annotation SseEmitter SseEmitter

List of usage examples for org.springframework.web.servlet.mvc.method.annotation SseEmitter SseEmitter

Introduction

In this page you can find the example usage for org.springframework.web.servlet.mvc.method.annotation SseEmitter SseEmitter.

Prototype

public SseEmitter(Long timeout) 

Source Link

Document

Create a SseEmitter with a custom timeout value.

Usage

From source file:io.github.proxyprint.kitchen.utils.NotificationManager.java

public SseEmitter subscribe(String username) {
    SseEmitter sseEmitter = new SseEmitter(0l);
    sseEmitter.onCompletion(new DeleteTask(this, username, sseEmitter));
    this.subscriptions.put(username, sseEmitter);
    return sseEmitter;
}

From source file:com.bodybuilding.argos.controller.TurbineStreamController.java

@RequestMapping("/turbine-stream/{cluster}")
public ResponseEntity<SseEmitter> streamHystrix(@PathVariable("cluster") String cluster) {
    Optional<HystrixClusterMonitor> clusterMonitor = clusterRegistry.getCluster(cluster);
    if (!clusterMonitor.isPresent()) {
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }/* ww w  .  ja  v a 2  s.  c o  m*/

    final SseEmitter emitter = new SseEmitter(TimeUnit.DAYS.toMillis(45));

    SseEmitterUtil.bindObservable(emitter,
            clusterMonitor.get().observeJson().takeUntil(shutdown).subscribeOn(Schedulers.io()));

    return ResponseEntity.ok(emitter);
}

From source file:com.bodybuilding.argos.controller.StreamController.java

@RequestMapping("/cluster.stream")
public SseEmitter streamMetrics() {
    final SseEmitter emitter = new SseEmitter(TimeUnit.DAYS.toMillis(45));
    SseEmitterUtil.bindObservable(emitter, streamObservable);
    return emitter;
}

From source file:org.springframework.web.servlet.mvc.method.annotation.ReactiveTypeHandler.java

/**
 * Process the given reactive return value and decide whether to adapt it
 * to a {@link ResponseBodyEmitter} or a {@link DeferredResult}.
 * @return an emitter for streaming or {@code null} if handled internally
 * with a {@link DeferredResult}./* w  w  w.j a  v a2  s. c  om*/
 */
@Nullable
public ResponseBodyEmitter handleValue(Object returnValue, MethodParameter returnType,
        ModelAndViewContainer mav, NativeWebRequest request) throws Exception {

    Assert.notNull(returnValue, "Expected return value");
    ReactiveAdapter adapter = this.reactiveRegistry.getAdapter(returnValue.getClass());
    Assert.state(adapter != null, "Unexpected return value: " + returnValue);

    ResolvableType elementType = ResolvableType.forMethodParameter(returnType).getGeneric(0);
    Class<?> elementClass = elementType.resolve(Object.class);

    Collection<MediaType> mediaTypes = getMediaTypes(request);
    Optional<MediaType> mediaType = mediaTypes.stream().filter(MimeType::isConcrete).findFirst();

    if (adapter.isMultiValue()) {
        if (mediaTypes.stream().anyMatch(MediaType.TEXT_EVENT_STREAM::includes)
                || ServerSentEvent.class.isAssignableFrom(elementClass)) {
            SseEmitter emitter = new SseEmitter(STREAMING_TIMEOUT_VALUE);
            new SseEmitterSubscriber(emitter, this.taskExecutor).connect(adapter, returnValue);
            return emitter;
        }
        if (CharSequence.class.isAssignableFrom(elementClass)) {
            ResponseBodyEmitter emitter = getEmitter(mediaType.orElse(MediaType.TEXT_PLAIN));
            new TextEmitterSubscriber(emitter, this.taskExecutor).connect(adapter, returnValue);
            return emitter;
        }
        if (mediaTypes.stream().anyMatch(MediaType.APPLICATION_STREAM_JSON::includes)) {
            ResponseBodyEmitter emitter = getEmitter(MediaType.APPLICATION_STREAM_JSON);
            new JsonEmitterSubscriber(emitter, this.taskExecutor).connect(adapter, returnValue);
            return emitter;
        }
    }

    // Not streaming...
    DeferredResult<Object> result = new DeferredResult<>();
    new DeferredResultSubscriber(result, adapter, elementType).connect(adapter, returnValue);
    WebAsyncUtils.getAsyncManager(request).startDeferredResultProcessing(result, mav);

    return null;
}