/** * Copyright (c) 2013-2016, The SeedStack authors <http://seedstack.org> * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.seedstack.seed.web.fixtures.websocket; import javax.inject.Inject; import javax.websocket.MessageHandler; import javax.websocket.OnClose; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @ServerEndpoint(value = "/chat") public class ChatEndpoint { private final Map<Session, MessageHandler> messageHandlers = new ConcurrentHashMap<>(); @Inject private ChatRoom chatRoom; @OnOpen public void onOpen(Session session) { ChatMessageHandler handler = new ChatMessageHandler(chatRoom, session); if (messageHandlers.put(session, handler) == null) { chatRoom.addClient(session); session.addMessageHandler(handler); } } @OnClose public void onClose(Session session) { MessageHandler handler = messageHandlers.get(session); if (handler != null) { session.removeMessageHandler(handler); chatRoom.removeClient(session); } } }