атмосфера один на один чат

Я только начал с Atmosphere для простого приложения для чата. Я скачал пример с java. Это приложение отправляет сообщения всем клиентам, как я могу отправить сообщение конкретному клиенту. я думаю, что я могу получить uuid. Пожалуйста, направьте меня в правильном направлении.

   @Config
@ManagedService(path = "/chat", atmosphereConfig = MAX_INACTIVE + "=9990000")
public class Chat {
    private final Logger logger = LoggerFactory.getLogger(Chat.class);

    @Inject
    private BroadcasterFactory factory;

    @Heartbeat
    public void onHeartbeat(final AtmosphereResourceEvent event) {
        logger.trace("Heartbeat send by {}", event.getResource());
    }

    @Ready
    public void onReady(final AtmosphereResource r) {
        logger.info("Browser {} connected", r.uuid());
        if(null!=factory && null!=factory.getClass()){
            logger.info("BroadcasterFactory used {}", factory.getClass().getName());
        }

    }


    @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());
        }
    }


    @org.atmosphere.config.service.Message(encoders = {JacksonEncoder.class}, decoders = {JacksonDecoder.class})
     @DeliverTo(DeliverTo.DELIVER_TO.BROADCASTER)
    public Message onMessage(Message message) throws IOException {
        logger.info("{} just send {}", message.getAuthor(), message.getMessage());
        return message;
    }

}

person Aadam    schedule 11.04.2015    source источник


Ответы (1)


Ваш класс Java неполный.

Во-первых, отсутствует переменная, которая идентифицирует каждую комнату чата на вашем пути:

 @ManagedService(path = "/chat/{chatRoomId}", atmosphereConfig = MAX_INACTIVE + "=9990000")
  public class Chat {

     @PathParam("chatRoomId")
     private String chatRoomId;

     [...]
  }

Но вы можете отправлять все сообщения только на один подключенный разъем.

Во-вторых, где находится ваш JS-файл сценария для отправки и получения сообщения веб-сокета?

Этот JS-файл сценария должен содержать следующие методы:

request.onOpen = function(request, response) {

};

request.onTransportFailure = function(request, response) {

};

request.onMessage = function(request, response) {

};

request.onClose = function(request, response) {

};

request.onError= function(request, response) {

};
request.onReconnect = function(request, response) {

};

Самое главное — объявить структуру вашего запроса:

var socket = atmosphere;
var subSocket;
var transport = 'websocket';

var request = { 
    url: document.location.toString() + 'chat' + chatRoomId,
    contentType : "application/json",
    logLevel : 'debug',
    transport : transport ,
    trackMessageLength : true,
    reconnectInterval : 5000 
};
person PauloDev    schedule 03.12.2015