/*******************************************************************************
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2013,2014 by Peter Pilgrim, Addiscombe, Surrey, XeNoNiQUe UK
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU GPL v3.0
* which accompanies this distribution, and is available at:
* http://www.gnu.org/licenses/gpl-3.0.txt
*
* Developers:
* Peter Pilgrim -- design, development and implementation
* -- Blog: http://www.xenonique.co.uk/blog/
* -- Twitter: @peter_pilgrim
*
* Contributors:
*
*******************************************************************************/
package je7hb.websocket.basic;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import static je7hb.websocket.basic.ChatUtils.*;
/**
* The type ChatServerEndPoint
*
* @author Peter Pilgrim
*/
// @Stateless
@ServerEndpoint("/chat")
public class ChatServerEndPoint {
@Inject
@ApplicationScoped
private ChatRoom chatRoom;
@PostConstruct
public void acquire() {
System.out.printf("%s.acquire() called in thread: [%s]\n",
getClass().getSimpleName(), Thread.currentThread().getName());
System.out.printf(" chatRoom = %s\n", chatRoom );
}
@PreDestroy
public void release() {
System.out.printf("%s.release() called\n", getClass().getSimpleName());
}
@OnOpen
public void open(Session session) {
System.out.printf("%s.open() called session=%s\n", getClass().getSimpleName(), session );
System.out.printf(" chatRoom = %s\n", chatRoom );
}
@OnClose
public void close(Session session) {
System.out.printf("%s.close() called session=%s\n", getClass().getSimpleName(), session);
}
@OnMessage
public void receiveMessage( String message, Session session ) {
System.out.printf("%s.receiveMessage() called with message=`%s', session %s, thread [%s]\n",
getClass().getSimpleName(), message, session, Thread.currentThread().getName() );
String tokens[] = message.split(DELIMITER);
String command = tokens[0];
String username = ( tokens.length > 1 ? tokens[1] : "" );
String text = ( tokens.length > 2 ? tokens[2] : "" );
ChatUser user = new ChatUser(session,username);
if ( LOGIN_REQUEST.equals(command)) {
chatRoom.addChatUser(user);
}
else if ( LOGOUT_REQUEST.equals(command)) {
chatRoom.removeChatUser(user);
}
else if ( SEND_MSG_REQUEST.equals(command)) {
chatRoom.broadcastMessage(username,text);
}
else {
encodeErrorReply(session,username,
String.format("unknown command: %s", command));
}
}
}