package lahsivjar.spring.websocket.template;

import java.io.IOException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

public class CustomWebSocketHandler extends TextWebSocketHandler {

    private static final Logger logger = LoggerFactory.getLogger(CustomWebSocketHandler.class);

    /*
     * WebSocket is a very thin layer over TCP and, by default, leaves it upto
     * the application to interpret the meaning of message. Since, in this
     * example/template we don't use any messaging sub protocol (which is
     * allowed by WebSocket RFC-6455) we need to handle the message in its raw
     * form or possibly build a custom framework.
     */
    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) {
        try {
            TextMessage ackMessage = new TextMessage("ACK: " + message.getPayload());
            session.sendMessage(ackMessage);
        } catch (IOException e) {
            logger.warn("Failed to send message to session {}, ignoring quietly", session.getId());
        }
    }
}