类javax.ws.rs.sse.Sse源码实例Demo

下面列出了怎么用javax.ws.rs.sse.Sse的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: servicetalk   文件: AsynchronousResources.java
@Produces(SERVER_SENT_EVENTS)
@Path("/sse/stream")
@GET
public void getSseStream(@Context final SseEventSink eventSink,
                         @Context final Sse sse) {
    scheduleSseEventSend(new SseEmitter() {
        @Override
        public CompletionStage<?> emit(final OutboundSseEvent event) {
            return eventSink.send(event);
        }

        @Override
        public void close() {
            eventSink.close();
        }
    }, sse, Refs.of(0), ctx.executionContext().executor());
}
 
源代码2 项目: servicetalk   文件: AsynchronousResources.java
@Produces(SERVER_SENT_EVENTS)
@Path("/sse/broadcast")
@GET
public void getSseBroadcast(@Context final SseEventSink eventSink,
                            @Context final Sse sse) {
    eventSink.send(sse.newEvent("bar"));
    final SseBroadcaster sseBroadcaster = sse.newBroadcaster();
    sseBroadcaster.register(eventSink);

    scheduleSseEventSend(new SseEmitter() {
        @Override
        public CompletionStage<?> emit(final OutboundSseEvent event) {
            return sseBroadcaster.broadcast(event);
        }

        @Override
        public void close() {
            sseBroadcaster.close();
        }
    }, sse, Refs.of(0), ctx.executionContext().executor());
}
 
@POST
@Path("progress/{report_id}")
@Produces(MediaType.SERVER_SENT_EVENTS)
public void eventStream(@PathParam("report_id") final String id,
                        @Context SseEventSink es,
                        @Context Sse sse) {
    executorService.execute(() -> {
        try {
            eventSink.send(sse.newEventBuilder().name("report-progress")
                    .data(String.class, "Commencing process for report " + id + " ...").build());
            es.send(sse.newEvent("Progress", "25%"));
            Thread.sleep(500);
            es.send(sse.newEvent("Progress", "50%"));
            Thread.sleep(500);
            es.send(sse.newEvent("Progress", "75%"));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    });
}
 
源代码4 项目: liberty-bikes   文件: PartyQueue.java
public void add(String playerId, SseEventSink sink, Sse sse) {
    QueuedClient client = new QueuedClient(playerId, sink, sse);
    // If this client was already in the queue, remove them and add them at the end
    if (waitingPlayers.removeFirstOccurrence(client)) {
        party.log("Removed client " + playerId + " from queue before adding at end");
        GameMetrics.counterDec(GameMetrics.currentQueuedPlayersCounter);
    }
    party.log("Adding client " + playerId + " into the queue in position " + client.queuePosition());
    waitingPlayers.add(client);

    GameMetrics.counterInc(GameMetrics.currentQueuedPlayersCounter);

    if (party.getCurrentRound().isOpen())
        promoteClients();
    else
        client.notifyPosition();
}
 
源代码5 项目: cxf   文件: OutboundSseEventImplTest.java
/**
 * A user should not need to specify a media type when creating an outbound event. The default
 * should be <code>MediaType.SERVER_SENT_EVENTS_TYPE</code>.
 */
@Test
public void testDefaultMediaType() {
    Sse sse = new SseImpl();

    // test newEvent(data)
    OutboundSseEvent event = sse.newEvent("myData");
    assertNull(event.getName());
    assertEquals("myData", event.getData());
    assertEquals(MediaType.TEXT_PLAIN_TYPE, event.getMediaType());

    // test newEvent(name, data)
    event = sse.newEvent("myName", "myData2");
    assertEquals("myName", event.getName());
    assertEquals("myData2", event.getData());
    assertEquals(MediaType.TEXT_PLAIN_TYPE, event.getMediaType());

    // test newEventBuilder()...build()
    event = sse.newEventBuilder().comment("myComment").data("myData3").build();
    assertEquals("myComment", event.getComment());
    assertEquals("myData3", event.getData());
    assertEquals(MediaType.TEXT_PLAIN_TYPE, event.getMediaType());
}
 
源代码6 项目: onos   文件: RestSBControllerImplTest.java
@GET
@Path("server-sent-events")
@Produces(MediaType.SERVER_SENT_EVENTS)
public void getServerSentEvents(@Context SseEventSink eventSink, @Context Sse sse) throws InterruptedException {
    new Thread(() -> {
        try {
            for (int i = 0; i < 10; i++) {
                // ... code that waits 0.1 second
                    Thread.sleep(100L);
                final OutboundSseEvent event = sse.newEventBuilder()
                        .id(String.valueOf(i))
                        .name("message-to-rest-sb")
                        .data(String.class, "Test message " + i + "!")
                        .build();
                eventSink.send(event);
                System.out.println("Message " + i + " sent");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }).start();
}
 
源代码7 项目: servicetalk   文件: CancellableResources.java
@Produces(SERVER_SENT_EVENTS)
@Path("/sse")
@GET
public void getSseStream(@Context final SseEventSink eventSink,
                         @Context final Sse sse,
                         @Context final ConnectionContext ctx) {
    sendSseUntilFailure(eventSink, sse, ctx.executionContext().executor());
}
 
源代码8 项目: servicetalk   文件: CancellableResources.java
private void sendSseUntilFailure(final SseEventSink eventSink, final Sse sse, final Executor executor) {
    try {
        eventSink.send(sse.newEvent("foo"));
        executor.schedule(() -> sendSseUntilFailure(eventSink, sse, executor), 10, MILLISECONDS);
    } catch (final Throwable t) {
        if (eventSink.isClosed()) {
            sseSinkClosedLatch.countDown();
        } else {
            throw new IllegalStateException("SseEventSink should be closed", t);
        }
    }
}
 
源代码9 项目: servicetalk   文件: AsynchronousResources.java
@Produces(SERVER_SENT_EVENTS)
@Path("/sse/unsupported")
@GET
public void getSseUnsupportedType(@Context final SseEventSink eventSink,
                                  @Context final Sse sse) {
    eventSink.send(sse.newEventBuilder()
            .data(Buffer.class, ctx.executionContext().bufferAllocator().fromAscii("foo"))
            .mediaType(MediaType.TEXT_PLAIN_TYPE)
            .build());
}
 
源代码10 项目: servicetalk   文件: AsynchronousResources.java
private void scheduleSseEventSend(final SseEmitter emmitter, final Sse sse, final Ref<Integer> iRef,
                                  final Executor executor) {
    executor.schedule(() -> {
        final int i = iRef.get();
        emmitter.emit(sse.newEvent("foo" + i)).whenComplete((r, t) -> {
            if (t == null && i < 9) {
                iRef.set(i + 1);
                scheduleSseEventSend(emmitter, sse, iRef, executor);
            } else {
                emmitter.close();
            }
        });
    }, 10, MILLISECONDS);
}
 
源代码11 项目: Java-EE-8-and-Angular   文件: TaskUpdatesSSE.java
@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
public void subscribe(@Context Sse sse, @Context SseEventSink eventSink) {
    this.sse = sse;
    if(this.broadcaster == null) {
        this.broadcaster = sse.newBroadcaster();
    }
    this.broadcaster.register(eventSink);
}
 
源代码12 项目: Java-EE-8-and-Angular   文件: IssueUpdatesSSE.java
@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
public void subscribe(@Context Sse sse, @Context SseEventSink eventSink) {
    this.sse = sse;
    if(this.broadcaster == null) {
        this.broadcaster = sse.newBroadcaster();
    }
    this.broadcaster.register(eventSink);
}
 
源代码13 项目: javaee8-cookbook   文件: SseResource.java
@POST
public void addMessage(final String message, @Context Sse sse) throws IOException {
    if (SINK != null) {
        SINK.send(sse.newEventBuilder()
                .name("sse-message")
                .id(String.valueOf(System.currentTimeMillis()))
                .data(String.class, message)
                .comment("")
                .build());
    }
}
 
源代码14 项目: javaee8-cookbook   文件: ServerSentService.java
@Path("start")
@POST
public Response start(@Context Sse sse) {

    final UserEvent process = new UserEvent(sse);

    POOL.put(process.getId(), process);
    executor.submit(process);

    final URI uri = UriBuilder.fromResource(ServerSentService.class).path("register/{id}").build(process.getId());
    return Response.created(uri).build();
}
 
源代码15 项目: liberty-bikes   文件: PartyService.java
@GET
@Path("/{partyId}/queue")
@Produces(MediaType.SERVER_SENT_EVENTS)
public void joinQueue(@PathParam("partyId") String partyId,
                      @QueryParam("playerId") String playerId,
                      @Context SseEventSink sink, @Context Sse sse) {
    Objects.requireNonNull(playerId, "Client attemted to queue for a party without providing playerId");
    Party p = getParty(partyId);
    if (p != null)
        p.enqueueClient(playerId, sink, sse);
}
 
源代码16 项目: ee8-sandbox   文件: SseResource.java
@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
public void eventStream(@Context Sse sse, @Context SseEventSink eventSink) {
    // Resource method is invoked when a client subscribes to an event stream.
    // That implies that sending events will most likely happen from different
    // context - thread / event handler / etc, so common implementation of the
    // resource method will store the eventSink instance and the application 
    // logic will retrieve it when an event should be emitted to the client.

    // sending events:
    eventSink.send(sse.newEvent("event1"));
}
 
源代码17 项目: openwebbeans-meecrowave   文件: NewsService.java
@GET
@Path("/update")
@Produces(MediaType.SERVER_SENT_EVENTS)
public void newsUpdate(@Context SseEventSink eventSink, @Context Sse sse) {
	CompletableFuture.runAsync(() -> {
		IntStream.range(1, 6).forEach(c -> {
			JsonObject newsEvent = Json.createObjectBuilder().add("news", String.format("Updated Event %d", newsCounter.incrementAndGet())).build();
			eventSink.send(sse.newEventBuilder().mediaType(MediaType.APPLICATION_JSON_TYPE).data(newsEvent).build());
		});
		//closing only on the client is generating a chunked connection exception that can be troubleshooted at a later date.
		eventSink.close();
	});
}
 
源代码18 项目: openhab-core   文件: SitemapResource.java
@Override
public void onEvent(SitemapEvent event) {
    final Sse sse = this.sse;
    if (sse == null) {
        logger.trace("broadcast skipped (no one listened since activation)");
        return;
    }

    final OutboundSseEvent outboundSseEvent = sse.newEventBuilder().name("event")
            .mediaType(MediaType.APPLICATION_JSON_TYPE).data(event).build();
    broadcaster.sendIf(outboundSseEvent, info -> {
        String sitemapName = event.sitemapName;
        String pageId = event.pageId;
        if (sitemapName != null && sitemapName.equals(subscriptions.getSitemapName(info.subscriptionId))
                && pageId != null && pageId.equals(subscriptions.getPageId(info.subscriptionId))) {
            if (logger.isDebugEnabled()) {
                if (event instanceof SitemapWidgetEvent) {
                    logger.debug("Sent sitemap event for widget {} to subscription {}.",
                            ((SitemapWidgetEvent) event).widgetId, info.subscriptionId);
                } else if (event instanceof ServerAliveEvent) {
                    logger.debug("Sent alive event to subscription {}.", info.subscriptionId);
                }
            }
            return true;
        }
        return false;
    });
}
 
源代码19 项目: cxf   文件: StatsRestServiceImpl.java
@Context 
public void setSse(Sse sse) {
    this.broadcaster = sse.newBroadcaster();
    this.builder = sse.newEventBuilder();
    
    Flowable
        .interval(500, TimeUnit.MILLISECONDS)
        .zipWith(
            Flowable.generate((Emitter<OutboundSseEvent.Builder> emitter) -> emitter.onNext(builder.name("stats"))),
            (id, bldr) -> createStatsEvent(bldr, id)
        )
        .subscribeOn(Schedulers.single())
        .subscribe(broadcaster::broadcast);
}
 
源代码20 项目: cxf   文件: OutboundSseEventImplTest.java
/**
 * A user should not need to specify the type of data being sent in an outbound
 * event. In that case the OutboundSseEvent should use the data object's type. Other
 * types may be specified, but the default (if not specified by the user) should be
 * the return value from the object's <code>getClass()</code> method.
 */
@Test
public void testDefaultClass() {
    Sse sse = new SseImpl();

    // test newEvent(string)
    OutboundSseEvent event = sse.newEvent("myData");
    assertNull(event.getName());
    assertEquals("myData", event.getData());
    assertEquals(String.class, event.getType());

    // test newEvent(name, data)
    event = sse.newEvent("myName", "myData2");
    assertEquals("myName", event.getName());
    assertEquals("myData2", event.getData());
    assertEquals(String.class, event.getType());

    // test newEventBuilder()...build()
    event = sse.newEventBuilder().comment("myComment").data("myData3").build();
    assertEquals("myComment", event.getComment());
    assertEquals("myData3", event.getData());
    assertEquals(String.class, event.getType());

    // test that object's class is re-enabled when calling different signatures of the data method
    OutboundSseEvent.Builder builder = sse.newEventBuilder();
    builder.data(TestData.class, new TestDataImpl("1", "2"));
    event = builder.build();
    assertEquals(TestData.class, event.getType());
    builder.data("myString");
    event = builder.build();
    assertEquals(String.class, event.getType());

    // same thing, but don't build in between calls to data
    event = sse.newEventBuilder().data(TestDataImpl.class, new TestDataImpl("3")).data("anotherString").build();
    assertEquals(String.class, event.getType());
    assertEquals("anotherString", event.getData());
}
 
源代码21 项目: hammock   文件: SseEndpoint.java
@GET
@Path("/{uuid}")
@Produces(SERVER_SENT_EVENTS)
public void doSseCall(@PathParam("uuid") String uuid, @Context SseEventSink sink, @Context Sse sse) {
    final OutboundSseEvent.Builder builder = sse.newEventBuilder();
    OutboundSseEvent event = builder.id(uuid)
            .data(SseModel.class, new SseModel("some model "+uuid))
            .build();
    sink.send(event);
    sink.close();
}
 
源代码22 项目: tutorials   文件: EchoHeaders.java
@GET
@Path("/events")
@Produces(MediaType.SERVER_SENT_EVENTS)
public void getServerSentEvents(@Context SseEventSink eventSink, @Context Sse sse) {
    OutboundSseEvent event = sse.newEventBuilder()
            .name("echo-headers")
            .data(String.class, headers.getHeaderString(AddHeaderOnRequestFilter.FILTER_HEADER_KEY))
            .build();
    eventSink.send(event);
}
 
源代码23 项目: quarkus   文件: ServerSentEventResource.java
@Context
public void setSse(final Sse sse) {
    this.sse = sse;
}
 
源代码24 项目: javaee8-cookbook   文件: ServerSentService.java
UserEvent(Sse sse) {
    this.sse = sse;
    this.sseBroadcaster = sse.newBroadcaster();
    id = System.currentTimeMillis();
}
 
源代码25 项目: liberty-bikes   文件: PartyQueue.java
public QueuedClient(String playerId, SseEventSink sink, Sse sse) {
    this.playerId = playerId;
    this.sink = sink;
    this.sse = sse;
}
 
源代码26 项目: liberty-bikes   文件: Party.java
public void enqueueClient(String playerId, SseEventSink sink, Sse sse) {
    queue.add(playerId, sink, sse);
}
 
源代码27 项目: mycore   文件: MCREventHandler.java
MCRObjectHandler(SseBroadcaster sseBroadcaster, Sse sse,
    Function<URI, URI> uriResolver) {
    this.sseBroadcaster = sseBroadcaster;
    this.sse = sse;
    this.uriResolver = uriResolver;
}
 
源代码28 项目: mycore   文件: MCREventHandler.java
MCRDerivateHandler(SseBroadcaster sseBroadcaster, Sse sse, Function<URI, URI> uriResolver) {
    this.sseBroadcaster = sseBroadcaster;
    this.sse = sse;
    this.uriResolver = uriResolver;
}
 
源代码29 项目: mycore   文件: MCREventHandler.java
MCRPathHandler(SseBroadcaster sseBroadcaster, Sse sse, Function<URI, URI> uriResolver, ServletContext context) {
    this.sseBroadcaster = sseBroadcaster;
    this.sse = sse;
    this.context = context;
    this.uriResolver = uriResolver;
}
 
源代码30 项目: ee8-sandbox   文件: SseRequest.java
public SseRequest(Sse sse, SseEventSink eventSink) {
    this.sse = sse;
    this.eventSink = eventSink;
}
 
 类所在包
 类方法
 同包方法