001package ca.bc.webarts.servlet;
002
003import org.eclipse.jetty.websocket.api.Session;
004import org.eclipse.jetty.websocket.api.WebSocketAdapter;
005
006/** A very basic event socket impl that the AjaxRestWebsocketListener uses to handle webSocket Events. **/
007public class EventSocket extends WebSocketAdapter
008{
009  Session session_ = null;
010
011    @Override
012    public void onWebSocketConnect(Session sess)
013    {
014        super.onWebSocketConnect(sess);
015        System.out.println("Socket Connected: " + sess);
016        session_ = sess;
017    }
018
019    @Override
020    public void onWebSocketText(String message)
021    {
022        super.onWebSocketText(message);
023        String img = "";
024        System.out.println("Received TEXT message: " + message);
025        if(message.startsWith("img")) img=message.substring(3).trim();
026        try
027        {
028          if(session_!=null)
029          {
030            session_.getRemote().sendString("  Received: "+message);
031            if(img!=null && !"".equals(img) )
032            {
033              System.out.println("  )))) Socket Received image request for: " + img);
034              java.io.File fi = new java.io.File(img);
035              byte[] fileContent=null;
036              try
037              {
038                  fileContent = java.nio.file.Files.readAllBytes(fi.toPath());
039                  java.nio.ByteBuffer buf = java.nio.ByteBuffer.wrap(fileContent);
040
041                  session_.getRemote().sendBytes(buf);
042              }
043              catch (java.io.IOException e)
044              {
045                  // TODO Auto-generated catch block
046                  e.printStackTrace();
047              }
048            }
049          }
050       }
051        catch (java.io.IOException ioEx)
052        {
053          System.out.println("ERROR: can't get remote host connection");
054        }
055    }
056
057    @Override
058    public void onWebSocketClose(int statusCode, String reason)
059    {
060        super.onWebSocketClose(statusCode,reason);
061        System.out.println("Socket Closed: [" + statusCode + "] " + reason);
062        session_ = null;
063    }
064
065    @Override
066    public void onWebSocketError(Throwable cause)
067    {
068        super.onWebSocketError(cause);
069        cause.printStackTrace(System.err);
070    }
071}