2015-04-11 9 views
0

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

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

} 

ответ

-1

Ваш Java-класс является неполным.

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

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

    @PathParam("chatRoomId") 
    private String chatRoomId; 

    [...] 
    } 

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

Во-вторых, где ваш скриптовый 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 
};