/* * Copyright 2013-2014 High-Level Technologies * * 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.zodiark.service.chat; import org.atmosphere.config.service.Disconnect; import org.atmosphere.config.service.ManagedService; import org.atmosphere.config.service.Ready; import org.atmosphere.cpr.AtmosphereResource; import org.atmosphere.cpr.AtmosphereResourceEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; /** * Simple annotated class that demonstrate the power of Atmosphere. This class supports all transports, support * message length guarantee, heart beat, message cache thanks to the @managedAService. */ @ManagedService(path = "/{room}") 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 an {@link AtmosphereResource} */ @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 {@link AtmosphereResourceEvent} */ @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 a Message * @throws IOException */ @org.atmosphere.config.service.Message(encoders = {JacksonEncoder.class}, decoders = {JacksonDecoder.class}) public Message onMessage(Message message) throws IOException { // TODO: We don't need to use Jackson here logger.info("{} just send {}", message.getAuthor(), message.getMessage()); return message; } }