/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cz.kiwi.cometd.websocket;

import cz.kiwi.cometd.listener.ContentChannelListener;
import java.io.IOException;
import org.eclipse.jetty.util.TypeUtil;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
import org.eclipse.jetty.websocket.WebSocket;

/**
 *
 * @author esner
 */
public class WebSocketJettyHandler implements WebSocket, WebSocket.OnTextMessage, WebSocket.OnControl {
        private static final Logger logger = Log.getLogger(WebSocketJettyHandler.class);
        
        boolean _verbose = true;
    
        protected WebSocket.Connection _connection;
        
        public WebSocket.Connection getConnection()
        {
            return _connection;
        }
        
        public void onOpen(WebSocket.Connection connection)
        {
            _connection = connection;
            _connection.setMaxIdleTime(0);
            
            if (ContentChannelListener.contentMessage != null && _connection != null) {    
                try {
                    _connection.sendMessage(ContentChannelListener.contentMessage);
                    
                    } catch (IOException ex) {
                        logger.warn(ex.getMessage());
                    }
                }
            
            if (_verbose)
                System.err.printf("%s#onOpen %s %s\n",this.getClass().getSimpleName(),connection,connection.getProtocol());
        }

        public void onClose(int code,String message)
        {
            if (_verbose)
                System.err.printf("%s#onDisonnect %d %s\n",this.getClass().getSimpleName(),code,message);
            
            _connection = null;
        }
        
        public boolean onControl(byte controlCode, byte[] data, int offset, int length)
        {

            if (_verbose)
                System.err.printf("%s#onControl  %s %s\n",this.getClass().getSimpleName(),TypeUtil.toHexString(controlCode),TypeUtil.toHexString(data,offset,length));            
            return false;
        }

        public void onMessage(String data)
        {
            if (_verbose)
                System.err.printf("%s#onMessage     %s\n",this.getClass().getSimpleName(),data);
        }

        public void onMessage(byte[] data, int offset, int length)
        {
            if (_verbose)
                System.err.printf("%s#onMessage     %s\n",this.getClass().getSimpleName(),TypeUtil.toHexString(data,offset,length));
        }
 
    
        public void sendMessage(String message) {
            if (this._connection != null) {
                try {
                    //logger.info("Sending message..");
                    _connection.sendMessage(message);
                } catch (IOException ex) {
                    logger.warn(ex.getMessage());
                } 
            }
        }
  
}