package websocket.messagehandler.example.endpoints;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.logging.Logger;
import javax.websocket.EndpointConfig;
import javax.websocket.MessageHandler;
import javax.websocket.PongMessage;
import javax.websocket.Session;
public class FullEchoEndpoint extends javax.websocket.Endpoint {
private final static Logger log = Logger.getLogger(FullEchoEndpoint.class
.getSimpleName());
@Override
public void onOpen(Session session, EndpointConfig config) {
final String sessionId = session.getId();
log.info("established session with id: " + sessionId);
// add text based message handler
session.addMessageHandler(new MessageHandler.Whole<String>() {
@Override
public void onMessage(String msg) {
log.info(sessionId + ": text message: " + msg);
}
});
// add binary based message handler
session.addMessageHandler(new MessageHandler.Whole<ByteBuffer>() {
@Override
public void onMessage(ByteBuffer buffer) {
log.info(sessionId + ": binary message: "
+ new String(buffer.array()));
}
});
session.addMessageHandler(new MessageHandler.Whole<PongMessage>() {
@Override
public void onMessage(PongMessage pongMessage) {
StringBuffer pong = new StringBuffer();
pong.append(sessionId)
.append(": pong message: ")
.append(new String(pongMessage.getApplicationData()
.array()));
log.info(pong.toString());
}
});
String pingString = FullEchoEndpoint.class.getName() + " pings";
ByteBuffer pingData = ByteBuffer.allocate(pingString.getBytes().length);
pingData.put(pingString.getBytes()).flip();
try {
session.getBasicRemote().sendPing(pingData);
} catch (IllegalArgumentException | IOException e) {
log.severe("error in sending ping");
}
}
}