package socket; import java.io.IOException; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.websocket.WebSocket; import org.eclipse.jetty.websocket.WebSocketServlet; /** * Jetty WebSocketServlet implementation class MarketWebSocket */ public class ForumWebSocket extends WebSocketServlet { private static final long serialVersionUID = 1L; /** * @see WebSocketServlet#WebSocketServlet() */ public ForumWebSocket() { super(); // TODO Auto-generated constructor stub } private final Set<InternalMarketWebSocket> members = new CopyOnWriteArraySet<InternalMarketWebSocket>(); /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { getServletContext().getNamedDispatcher("default").forward(request, response); } /* * @see org.eclipse.jetty.websocket.WebSocketServlet#doWebSocketConnect(javax.servlet.http.HttpServletRequest, java.lang.String) */ protected WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) { return new InternalMarketWebSocket(); } class InternalMarketWebSocket implements WebSocket { private Outbound outbound; public void onConnect(Outbound outbound) { this.outbound = outbound; members.add(this); for (InternalMarketWebSocket member : members) { try { member.outbound.sendMessage("CONNECTED:"+members.size()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /* * @see org.eclipse.jetty.websocket.WebSocket#onMessage(byte, byte[], * int, int) */ public void onMessage(byte frame, byte[] data, int offset, int length) { } /* * @see org.eclipse.jetty.websocket.WebSocket#onMessage(byte, * java.lang.String) */ public void onMessage(byte frame, String data) { for (InternalMarketWebSocket member : members) { try { member.outbound.sendMessage(frame, data); } catch (IOException e) { // org.eclipse.jetty.util.log.Log.warn(e); e.printStackTrace(); } } } /* * @see org.eclipse.jetty.websocket.WebSocket#onDisconnect() */ public void onDisconnect() { members.remove(this); for (InternalMarketWebSocket member : members) { try { member.outbound.sendMessage("CONNECTED:"+members.size()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /* * * @see org.eclipse.jetty.websocket.WebSocket#onFragment(boolean, byte, * byte[], int, int) */ public void onFragment(boolean more, byte opcode, byte[] data, int offset, int length) { } } }