Я пытаюсь написать чат с помощью webcocket, для пользователей в автономном режиме я использовал java Queue. Если пользователь находится в автономном режиме, я сохраняю сообщения в очереди, и когда пользователь подключается к сети, я проверяю, пуста ли очередь, а если нет, используя цикл, который я удаляю каждое сообщение из Queue. Проблема в том, что он просто отправляет последнее сообщение пользователю, хотя все сообщения находятся в очереди, вот мой метод onOpen:
@ServerEndpoint(value = "/chat/{room}/{user}", encoders = ChatMessageEncoder.class, decoders = ChatMessageDecoder.class)
public class ChatEndpoint {
private final Logger log = Logger.getLogger(getClass().getName());
private static final Map<String, Queue<ChatMessage>> userMessageBuffer = new HashMap<>();
@OnOpen
public void open(final Session session,
@PathParam("room") final String room,
@PathParam("user") final String userId) {
log.info("session openend and bound to room: " + room);
// session.getUserProperties().put("room", room);
session.getUserProperties().put("user", userId);
Queue<ChatMessage> userMsgs = userMessageBuffer.get(userId);
ChatMessage sendChat = new ChatMessage();
if (userMsgs != null && !userMsgs.isEmpty()) {
for (int i = 0; i < userMsgs.size(); i++) {
sendChat = userMsgs.remove();
System.out.println("size!!!!!! " + sendChat.getMessage());
try {
session.getBasicRemote().sendObject(sendChat);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (EncodeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}}
Кто-нибудь знает, где проблема?
userMsgs.size()
будет возвращать все меньшие и меньшие значения каждый раз, когда цикл for зацикливается? - person Kayaman   schedule 07.07.2015i
для чего-то, просто используйте циклwhile (userMsgs.size() > 0)
вместо циклаfor
. - person JonK   schedule 07.07.2015onOpen
илиsend
. Вы можете сделать так, что в этом нет ничего плохого. Проверьте здесь: tyrus.java.net/documentation/1.4/index / - person Karthik   schedule 07.07.2015