package events.collect;
import java.net.URI;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.websocket.ClientEndpoint;
import javax.websocket.CloseReason;
import javax.websocket.ContainerProvider;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;
/**
* WebSocket Client
*
* @author Vishnu Vettrivel
*/
@ClientEndpoint
public class WebsocketClientEndpoint implements SocketClientEndpoint {
private static final Logger logger = Logger.getLogger( WebsocketClientEndpoint.class.getName() );
Session userSession = null;
private MessageHandler messageHandler;
URI clientEndPointURI;
public WebsocketClientEndpoint(URI endpointURI) {
clientEndPointURI = endpointURI;
initialize();
}
/* (non-Javadoc)
* @see events.collect.SocketClientEndpoint#initialize()
*/
public void initialize() {
try {
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
container.connectToServer(this, clientEndPointURI);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see events.collect.SocketClientEndpoint#onOpen(javax.websocket.Session)
*/
@OnOpen
public void onOpen(Session userSession) {
logger.log(Level.INFO, "opening websocket:");
this.userSession = userSession;
}
/* (non-Javadoc)
* @see events.collect.SocketClientEndpoint#onClose(javax.websocket.Session, javax.websocket.CloseReason)
*/
@OnClose
public void onClose(Session userSession, CloseReason reason) {
logger.log(Level.INFO, "closing websocket, reason:"+reason.getReasonPhrase());
this.userSession = null;
}
/* (non-Javadoc)
* @see events.collect.SocketClientEndpoint#onMessage(java.lang.String)
*/
@OnMessage
public void onMessage(String message) {
if (this.messageHandler != null) {
this.messageHandler.handleMessage(message);
}
}
/* (non-Javadoc)
* @see events.collect.SocketClientEndpoint#addMessageHandler(events.collect.WebsocketClientEndpoint.MessageHandler)
*/
public void addMessageHandler(MessageHandler msgHandler) {
this.messageHandler = msgHandler;
}
/* (non-Javadoc)
* @see events.collect.SocketClientEndpoint#sendMessage(java.lang.String)
*/
public void sendMessage(String message) {
this.userSession.getAsyncRemote().sendText(message);
}
/* (non-Javadoc)
* @see events.collect.SocketClientEndpoint#getUserSession()
*/
public Session getUserSession() {
return userSession;
}
}