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

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

Introduction

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

Prototype

public synchronized void onCompletion(Runnable callback) 

Source Link

Document

Register code to invoke when the async request completes.

Usage

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

/**
 * Unsubscribes the subscription when the emitter completes or times out
 * @param emitter/*from   w  w w .ja  va 2s  . c o  m*/
 * @param subscription
 */
public static void bindUnsubscribe(SseEmitter emitter, Subscription subscription) {
    emitter.onCompletion(subscription::unsubscribe);
    emitter.onTimeout(subscription::unsubscribe);
}

From source file:de.codecentric.boot.admin.journal.web.JournalController.java

@RequestMapping(path = "/api/journal", produces = "text/event-stream")
public SseEmitter getJournalEvents() {
    final SseEmitter emitter = new SseEmitter();
    emitter.onCompletion(new Runnable() {
        @Override/*  w  ww . ja  v  a 2 s .  co  m*/
        public void run() {
            emitters.remove(emitter);
        }
    });
    emitters.add(emitter);
    return emitter;
}

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:io.spring.isomorphic.CommentController.java

@RequestMapping("/sse/updates")
SseEmitter subscribeUpdates() {/*from   ww  w . j  av a  2 s.c o  m*/
    SseEmitter sseEmitter = new SseEmitter();
    this.sseEmitters.add(sseEmitter);
    sseEmitter.onCompletion(() -> {
        this.sseEmitters.remove(sseEmitter);
    });
    return sseEmitter;
}

From source file:com.ethlo.kfka.sse.EventController.java

@RequestMapping(value = "/v1/events", method = RequestMethod.GET)
public SseEmitter event(@RequestHeader(value = "Last-Event-ID", required = false) String lastEventIdHeader,
        @RequestParam(required = true, value = "topic") String topic,
        @RequestParam(required = false, value = "rewind") Integer rewind,
        @RequestParam(required = false, value = "lastEventId") Long lastEventIdOverride) throws IOException {
    final SseEmitter sseEmitter = new SseEmitter();
    final Emitter emitter = new Emitter(sseEmitter);

    logger.debug("Opening emitter {}", emitter.hashCode());
    this.emitters.add(emitter);

    final Long lastEventId = lastEventIdOverride != null ? lastEventIdOverride
            : (lastEventIdHeader != null ? Long.parseLong(lastEventIdHeader) : null);

    final KfkaPredicate p = new KfkaPredicate().topic(topic);
    if (lastEventId != null) {
        p.messageId(lastEventId + 1);/*from w ww . j  a v  a 2s .c  o  m*/
        p.relativeOffset(Integer.MIN_VALUE + 10);
    } else {
        final int offset = rewind != null ? Math.abs(rewind) * -1 : -20;
        p.relativeOffset(offset);
    }

    final KfkaMessageListener l = kfkaManager.addListener((msg) -> {
        try {
            emitter.emit(msg);
        } catch (IOException exc) {
            throw Throwables.propagate(exc);
        }
    }, p);

    emitter.setListener(l);

    // Remove on completion
    sseEmitter.onCompletion(new Runnable() {
        @Override
        public void run() {
            logger.debug("Emitter {} closed", emitter.hashCode());
            emitters.remove(emitter);
            kfkaManager.removeListener(emitter.getListener());
        }
    });

    return sseEmitter;
}