Guest User

Sven

a guest
Dec 9th, 2010
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.30 KB | None | 0 0
  1. package test;
  2.  
  3. import java.io.IOException;
  4. import java.util.logging.Level;
  5. import java.util.logging.Logger;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import net.sourceforge.stripes.action.ActionBean;
  9. import net.sourceforge.stripes.action.ActionBeanContext;
  10. import net.sourceforge.stripes.action.DefaultHandler;
  11. import net.sourceforge.stripes.action.Resolution;
  12. import net.sourceforge.stripes.action.UrlBinding;
  13. import org.eclipse.jetty.websocket.WebSocket;
  14. import org.eclipse.jetty.websocket.WebSocketFactory;
  15.  
  16. @UrlBinding( "/ws.action" )
  17. public class WebSocketActionBean implements ActionBean {
  18.     private ActionBeanContext context;
  19.     private static WebSocketFactory WSFACTORY;
  20.     private static final Logger logger = Logger.getLogger( WebSocketActionBean.class.getName() );
  21.  
  22.     private class MyWebSocket implements WebSocket {
  23.         private Outbound outbound;
  24.  
  25.         @Override
  26.         public void onConnect( Outbound outbound ) {
  27.             this.outbound = outbound;
  28.             logger.info( "Connect" );
  29.         }
  30.  
  31.         @Override
  32.         public void onMessage( byte opcode, String data ) {
  33.             try {
  34.                 // just echo message
  35.                 outbound.sendMessage( data );
  36.             } catch ( IOException ex ) {
  37.                 logger.log( Level.SEVERE, null, ex );
  38.             }
  39.             logger.info( "Message" );
  40.         }
  41.  
  42.         @Override
  43.         public void onFragment( boolean more, byte opcode, byte[] data, int offset, int length ) {
  44.         }
  45.  
  46.         @Override
  47.         public void onMessage( byte opcode, byte[] data, int offset, int length ) {
  48.         }
  49.  
  50.         @Override
  51.         public void onDisconnect() {
  52.             logger.info( "Disconnect" );
  53.         }        
  54.     }
  55.  
  56.     static {
  57.         WSFACTORY = new WebSocketFactory( 8192 );
  58.         WSFACTORY.setMaxIdleTime( 300000 );
  59.     }
  60.  
  61.     @Override
  62.     public void setContext( ActionBeanContext context ) {
  63.         this.context = context;
  64.     }
  65.  
  66.     @Override
  67.     public ActionBeanContext getContext() {
  68.         return this.context;
  69.     }
  70.  
  71.     @DefaultHandler
  72.     public Resolution connect() {
  73.         return new Resolution() {
  74.             @Override
  75.             public void execute( HttpServletRequest request, HttpServletResponse response ) throws Exception {
  76.  
  77.                 if ( "WebSocket".equals( request.getHeader( "Upgrade" ) ) ) {
  78.  
  79.                     boolean hixie = request.getHeader( "Sec-WebSocket-Key1" ) != null;
  80.                     String protocol = request.getHeader( hixie ? "Sec-WebSocket-Protocol" : "WebSocket-Protocol" );
  81.  
  82.                     if ( protocol == null ) {
  83.                         protocol = request.getHeader( "Sec-WebSocket-Protocol" );
  84.                     }
  85.  
  86.                     WebSocket ws = new MyWebSocket();
  87.  
  88.                     String host = request.getHeader( "Host" );
  89.                     String origin = request.getHeader( "Origin" );
  90.  
  91.                     if ( origin == null ) {
  92.                         origin = host;
  93.                     }
  94.  
  95.                     WSFACTORY.upgrade( request, response, ws, origin, protocol );
  96.  
  97.                 } else {
  98.                     throw new IllegalStateException( "No WebSocket request" );
  99.                 }
  100.             }
  101.         };
  102.     }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment