Atmosphere Jersey Chat for Play

Atmosphere running on top of Play!

License

License

Categories

Categories

Jersey Program Interface REST Frameworks
GroupId

GroupId

org.atmosphere.samples
ArtifactId

ArtifactId

atmosphere-play-jersey
Last Version

Last Version

1.2.0
Release Date

Release Date

Type

Type

play2
Description

Description

Atmosphere Jersey Chat for Play
Atmosphere running on top of Play!

Download atmosphere-play-jersey

Dependencies

compile (4)

Group / Artifact Type Version
org.atmosphere : atmosphere-play jar 1.2.0
org.atmosphere : atmosphere-jersey jar 2.0.3
ch.qos.logback : logback-classic jar 1.0.13
com.sun.jersey : jersey-json jar 1.17

Project Modules

There are no modules declared in this project.

Playtosphere: Atmosphere for Play!

This project brings the Atmosphere Framework to the Play! Framework. It support ALL Atmosphere's modules like Runtime, Jersey and Socket.IO.

Try it!

Fork the samples workspace and go under samples/chat or samples/jersey)

   % sbt update
   % sbt run

JDK8

Download Atmosphere Play!, use Maven or sbt

For Play 2.6.x+:

     <dependency>
         <groupId>org.atmosphere</groupId>
         <artifactId>atmosphere-play</artifactId>
         <version>2.4.1</version>
     </dependency>

For Play 2.5.x+:

     <dependency>
         <groupId>org.atmosphere</groupId>
         <artifactId>atmosphere-play</artifactId>
         <version>2.3.0</version>
     </dependency>

For Play 2.4.x+:

     <dependency>
         <groupId>org.atmosphere</groupId>
         <artifactId>atmosphere-play</artifactId>
         <version>2.2.0</version>
     </dependency>

For Play 2.2.x+:

     <dependency>
         <groupId>org.atmosphere</groupId>
         <artifactId>atmosphere-play</artifactId>
         <version>2.1.2</version>
     </dependency>

For Play 2.1.x:

     <dependency>
         <groupId>org.atmosphere</groupId>
         <artifactId>atmosphere-play</artifactId>
         <version>1.0.0</version>
     </dependency>

Join the growing community

If you are interested, subscribe to our mailing list for more info! We are on irc.freenode.net under #atmosphere-comet

WebSockets, Server Sent Events, Streaming and Long-Polling transparently supported!

Server side using atmosphere-runtime

@ManagedService(path = "/chat")
public class Chat {
    private final Logger logger = LoggerFactory.getLogger(Chat.class);

    /**
     * Invoked when the connection as been fully established and suspended, e.g ready for receiving messages.
     *
     * @param r
     */
    @Ready
    public void onReady(final AtmosphereResource r) {
        logger.info("Browser {} connected.", r.uuid());
    }

    /**
     * Invoked when the client disconnect or when an unexpected closing of the underlying connection happens.
     *
     * @param event
     */
    @Disconnect
    public void onDisconnect(AtmosphereResourceEvent event) {
        if (event.isCancelled()) {
            logger.info("Browser {} unexpectedly disconnected", event.getResource().uuid());
        } else if (event.isClosedByClient()) {
            logger.info("Browser {} closed the connection", event.getResource().uuid());
        }
    }

    /**
     * Simple annotated class that demonstrate how {@link org.atmosphere.config.managed.Encoder} and {@link org.atmosphere.config.managed.Decoder
     * can be used.
     *
     * @param message an instance of {@link Message}
     * @return
     * @throws IOException
     */
    @org.atmosphere.config.service.Message(encoders = {JacksonEncoder.class}, decoders = {JacksonDecoder.class})
    public Message onMessage(Message message) throws IOException {
        logger.info("{} just send {}", message.getAuthor(), message.getMessage());
        return message;
    }

Server side using atmosphere-jersey

 @Path("/chat")
 public class ChatResource {

     /**
      * Suspend the response without writing anything back to the client.
      * @return a white space
      */
     @Suspend(contentType = "application/json")
     @GET
     public String suspend() {
         return "";
     }

     /**
      * Broadcast the received message object to all suspended response. Do not write back the message to the calling connection.
      * @param message a {@link Message}
      * @return a {@link Response}
      */
     @Broadcast(writeEntity = false)
     @POST
     @Produces("application/json")
     public Response broadcast(Message message) {
         return new Response(message.getAuthor(), message.getMessage());
     }
}

and on the client side,

    $(function () {
        "use strict";

        var header = $('#header');
        var content = $('#content');
        var input = $('#input');
        var status = $('#status');
        var myName = false;
        var author = null;
        var logged = false;
        var socket = $.atmosphere;
        var subSocket;
        var transport = 'websocket';

        // We are now ready to cut the request
        var request = { url: document.location.toString() + 'chat',
            contentType : "application/json",
            logLevel : 'debug',
            transport : transport ,
            trackMessageLength : true,
            fallbackTransport: 'websocket'};


        request.onMessage = function (response) {

             // do something
        };

        request.onClose = function(response) {
        };

        request.onError = function(response) {
        };

        subSocket = socket.subscribe(request);

[Analytics]

org.atmosphere.samples

Atmosphere Framework

Versions

Version
1.2.0
1.1.0.RC2
1.0.0
1.0.0.RC2
1.0.0.RC1
1.0.0.beta1