Package org.atmosphere.nettosphere.test

Source Code of org.atmosphere.nettosphere.test.Resource

/*
* Copyright 2014 Jeanfrancois Arcand
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.atmosphere.nettosphere.test;

import org.atmosphere.annotation.Broadcast;
import org.atmosphere.annotation.Resume;
import org.atmosphere.annotation.Schedule;
import org.atmosphere.annotation.Suspend;
import org.atmosphere.cpr.Broadcaster;
import org.atmosphere.cpr.BroadcasterFactory;
import org.atmosphere.jersey.Broadcastable;
import org.atmosphere.jersey.JerseyBroadcaster;
import org.atmosphere.jersey.SuspendResponse;
import org.atmosphere.util.StringFilterAggregator;
import org.atmosphere.util.XSSHtmlFilter;

import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

@Path("/{topic}")
@Produces("text/plain;charset=ISO-8859-1")
public class Resource {

    private
    @PathParam("topic")
    Broadcaster broadcaster;

    @GET
    public SuspendResponse<String> suspendUsingAPI() {

        SuspendResponse<String> r = new SuspendResponse.SuspendResponseBuilder<String>()
                .entity("resume")
                .broadcaster(broadcaster)
                .outputComments(false)
                .resumeOnBroadcast(true)
                .period(5, TimeUnit.SECONDS)
                .build();

        return r;
    }

    @GET
    @Path("scope")
    public SuspendResponse<String> suspendScopeRequestWithAPI(@PathParam("topic") Broadcaster b) throws ExecutionException, InterruptedException {

        SuspendResponse<String> r = new SuspendResponse.SuspendResponseBuilder<String>()
                .entity("bar")
                .broadcaster(broadcaster)
                .scope(Suspend.SCOPE.REQUEST)
                .outputComments(false)
                .resumeOnBroadcast(true)
                .period(5, TimeUnit.SECONDS)
                .build();

        b.broadcast("foo").get();
        return r;
    }

    @GET
    @Path("withComments")
    public SuspendResponse<String> subscribeWithCommentsWithAPI() {
        SuspendResponse<String> r = new SuspendResponse.SuspendResponseBuilder<String>()
                .broadcaster(broadcaster)
                .outputComments(true)
                .period(5, TimeUnit.SECONDS)
                .build();

        return r;
    }

    @GET
    @Path("forever")
    public SuspendResponse<String> suspendForeverWithAPI() {
        SuspendResponse<String> r = new SuspendResponse.SuspendResponseBuilder<String>()
                .broadcaster(broadcaster)
                .outputComments(true)
                .entity("")
                .build();

        return r;
    }

    @GET
    @Path("foreverWithoutComments")
    public SuspendResponse<String> suspendForeverWithoutCommentsWithAPI() {
        SuspendResponse<String> r = new SuspendResponse.SuspendResponseBuilder<String>()
                .broadcaster(broadcaster)
                .outputComments(false)
                .entity("")
                .build();

        return r;
    }

    @GET
    @Path("subscribeAndUsingExternalThread")
    public SuspendResponse<String> subscribeAndResumeUsingExternalThreadWithAPI(final @PathParam("topic") String topic) {
        Executors.newSingleThreadExecutor().submit(new Runnable() {
            public void run() {
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                }
                BroadcasterFactory.getDefault().lookup(JerseyBroadcaster.class, topic).broadcast("Echo: " + topic);
            }
        });

        SuspendResponse<String> r = new SuspendResponse.SuspendResponseBuilder<String>()
                .broadcaster(broadcaster)
                .resumeOnBroadcast(true)
                .entity("foo")
                .build();

        return r;
    }

    @GET
    @Path("suspendAndResume")
    @Suspend(outputComments = false)
    public SuspendResponse<String> suspendWithAPI() {
        SuspendResponse<String> r = new SuspendResponse.SuspendResponseBuilder<String>()
                .outputComments(false)
                .entity("suspend")
                .build();

        return r;
    }

    @GET
    @Path("subscribeAndResume")
    public SuspendResponse<String> subscribeAndResumeWithAPI() {
        SuspendResponse<String> r = new SuspendResponse.SuspendResponseBuilder<String>()
                .outputComments(false)
                .resumeOnBroadcast(true)
                .build();

        return r;
    }

    @GET
    @Resume
    @Path("suspendAndResume/{uuid}")
    public String resume() throws ExecutionException, InterruptedException {
        broadcaster.broadcast("resume").get();
        return "resumed";
    }

    @POST
    @Broadcast
    public Broadcastable publish(@FormParam("message") String message) {
        return broadcast(message);
    }

    @POST
    @Path("publishAndResume")
    @Broadcast(resumeOnBroadcast = true)
    public Broadcastable publishAndResume(@FormParam("message") String message) {
        return broadcast(message);
    }

    @POST
    @Path("filter")
    @Broadcast(resumeOnBroadcast = true, filters = {XSSHtmlFilter.class})
    public Broadcastable filter(@FormParam("message") String message) {
        return broadcast(message);
    }

    @POST
    @Path("aggregate")
    @Broadcast(resumeOnBroadcast = true, filters = {StringFilterAggregator.class})
    public Broadcastable aggregate(@FormParam("message") String message) {
        return broadcast(message);
    }

    @Schedule(period = 5, resumeOnBroadcast = true, waitFor = 5)
    @POST
    @Path("scheduleAndResume")
    public Broadcastable scheduleAndResume(@FormParam("message") String message) {
        return broadcast(message);
    }

    @Schedule(period = 10, waitFor = 5)
    @POST
    @Path("delaySchedule")
    public Broadcastable delaySchedule(@FormParam("message") String message) {
        return broadcast(message);
    }

    @Schedule(period = 5)
    @POST
    @Path("schedule")
    public Broadcastable schedule(@FormParam("message") String message) {
        return broadcast(message);
    }

    @Broadcast(delay = 0)
    @POST
    @Path("delay")
    public Broadcastable delayPublish(@FormParam("message") String message) {
        return broadcast(message);
    }

    @Broadcast(delay = 5, resumeOnBroadcast = true)
    @POST
    @Path("delayAndResume")
    public Broadcastable delayPublishAndResume(@FormParam("message") String message) {
        return broadcast(message);
    }

    @POST
    @Path("programmaticDelayBroadcast")
    public String manualDelayBroadcast(@FormParam("message") String message) {
        broadcaster.delayBroadcast(message);
        return message;
    }

    Broadcastable broadcast(String m) {
        return new Broadcastable(m + "\n", broadcaster);
    }

    @GET
    @Path("204")
    public SuspendResponse<String> suspend204() {

        SuspendResponse<String> r = new SuspendResponse.SuspendResponseBuilder<String>()
                .broadcaster(broadcaster)
                .outputComments(false)
                .resumeOnBroadcast(true)
                .period(5, TimeUnit.SECONDS)
                .build();

        return r;
    }
}
TOP

Related Classes of org.atmosphere.nettosphere.test.Resource

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.