/src/websocket/WebSockServer.java

https://github.com/cbradyatinquire/NetLogoWebSockets · Java · 124 lines · 89 code · 31 blank · 4 comment · 7 complexity · 787d7a2b24b2ddafbf7f617ba1006c90 MD5 · raw file

  1. package websocket;
  2. import java.util.concurrent.ConcurrentLinkedQueue;
  3. import javax.servlet.http.HttpServletRequest;
  4. import org.eclipse.jetty.server.Server;
  5. import org.eclipse.jetty.server.handler.ResourceHandler;
  6. import org.eclipse.jetty.server.nio.SelectChannelConnector;
  7. import org.eclipse.jetty.util.TypeUtil;
  8. import org.eclipse.jetty.websocket.WebSocket;
  9. import org.eclipse.jetty.websocket.WebSocketHandler;
  10. public class WebSockServer extends Server {
  11. boolean _verbose = true;
  12. WebSocket _websocket;
  13. SelectChannelConnector _connector;
  14. WebSocketHandler _wsHandler;
  15. ResourceHandler _rHandler;
  16. ConcurrentLinkedQueue<MyWebSocket> _broadcast = new ConcurrentLinkedQueue<MyWebSocket>();
  17. public void printHandlerCount()
  18. {
  19. System.err.println( "I NOW HAVE " + getHandlers().length + " HANDLERS");
  20. }
  21. public WebSockServer(int port)
  22. {
  23. System.err.println("GOT TO CONSTRUCTOR");
  24. _connector = new SelectChannelConnector();
  25. _connector.setPort(port);
  26. addConnector(_connector);
  27. System.err.println("ADDED CONNECTOR");
  28. _wsHandler = new WebSocketHandler()
  29. {
  30. @Override
  31. public WebSocket doWebSocketConnect(HttpServletRequest request, String protocol)
  32. {
  33. _websocket = new MyWebSocket();
  34. System.err.println("Created WEBSOCKET");
  35. return _websocket;
  36. }
  37. };
  38. setHandler(_wsHandler);
  39. // _rHandler=new ResourceHandler();
  40. // _rHandler.setDirectoriesListed(true);
  41. // _rHandler.setResourceBase("src/test/webapp"); //doesn't exist -- change if i need resources
  42. // _wsHandler.setHandler(_rHandler);
  43. _wsHandler.setHandler( new HelloWorld() );
  44. }
  45. class MyWebSocket implements WebSocket, WebSocket.OnFrame, WebSocket.OnBinaryMessage, WebSocket.OnTextMessage, WebSocket.OnControl
  46. {
  47. protected FrameConnection _connection;
  48. public FrameConnection getConnection()
  49. {
  50. return _connection;
  51. }
  52. public void onOpen(Connection connection)
  53. {
  54. if (_verbose)
  55. System.err.printf("%s#onOpen %s\n",this.getClass().getSimpleName(),connection);
  56. }
  57. public void onHandshake(FrameConnection connection)
  58. {
  59. if (_verbose)
  60. System.err.printf("%s#onHandshake %s %s\n",this.getClass().getSimpleName(),connection,connection.getClass().getSimpleName());
  61. _connection = connection;
  62. }
  63. public void onClose(int code,String message)
  64. {
  65. if (_verbose)
  66. System.err.printf("%s#onDisonnect %d %s\n",this.getClass().getSimpleName(),code,message);
  67. }
  68. public boolean onFrame(byte flags, byte opcode, byte[] data, int offset, int length)
  69. {
  70. if (_verbose)
  71. System.err.printf("%s#onFrame %s|%s %s\n",this.getClass().getSimpleName(),TypeUtil.toHexString(flags),TypeUtil.toHexString(opcode),TypeUtil.toHexString(data,offset,length));
  72. return false;
  73. }
  74. public boolean onControl(byte controlCode, byte[] data, int offset, int length)
  75. {
  76. if (_verbose)
  77. System.err.printf("%s#onControl %s %s\n",this.getClass().getSimpleName(),TypeUtil.toHexString(controlCode),TypeUtil.toHexString(data,offset,length));
  78. return false;
  79. }
  80. public void onMessage(String data)
  81. {
  82. if (_verbose)
  83. System.err.printf("%s#onMessage %s\n",this.getClass().getSimpleName(),data);
  84. System.err.println("GOT MESSAGE!! IT IS ---");
  85. System.err.println(data);
  86. }
  87. public void onMessage(byte[] data, int offset, int length)
  88. {
  89. if (_verbose)
  90. System.err.printf("%s#onMessage %s\n",this.getClass().getSimpleName(),TypeUtil.toHexString(data,offset,length));
  91. }
  92. }
  93. }