package alma.logoot.network; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import alma.logoot.network.p2p.P2PLayer; import alma.logoot.network.p2p.interfaces.OnReceiveHandler; /** * Servlet implementation class GetData */ public class GetData extends HttpServlet { private static final long serialVersionUID = 1L; private static ArrayList<PrintWriter> clients = new ArrayList<PrintWriter>(); private boolean master = false; private static P2PLayer p2p = P2PLayer.getInstance(); // private static final int BUFFER_SIZE = 4000000; private static final int BUFFER_SIZE = 4096; /** * @see HttpServlet#HttpServlet() */ public GetData() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doGet : session=> " + request.getSession(true).getId()); response.setHeader("pragma", "no-cache,no-store"); response.setHeader("cache-control", "no-cache,no-store,max-age=0,max-stale=0"); response.setHeader("Accept-Charset", "utf-8"); response.setContentType("text/event-stream;charset=utf-8;"); response.setCharacterEncoding("UTF-8"); clients.add(response.getWriter()); if (!master) { p2p.addOnReceiveHandler(new OnReceiveHandler() { @Override public void execute(String message) { System.out.println("Receive from P2P network: " + message); String clientSentence = (message.replaceAll("\n", "<br>")); for (PrintWriter out : clients) { out.print("data: " + clientSentence + "\n\n"); out.flush(); } } }); master = true; System.out.println("GetData : Creation de la socket sur le port " + NetworkServiceImpl.PORTSEND); ServerSocket welcomeSocket = new ServerSocket(NetworkServiceImpl.PORTSEND); while (true) { Socket connectionSocket = welcomeSocket.accept(); System.out.println("GetData : Acceptation de la socket"); BufferedReader inFromClient = new BufferedReader(new InputStreamReader( connectionSocket.getInputStream())); char[] buffer = new char[BUFFER_SIZE]; inFromClient.read(buffer); String clientSentence = (new String(buffer).trim().replaceAll("\n", "<br>")); for (PrintWriter out : clients) { out.print("data: " + clientSentence + "\n\n"); out.flush(); } } } else { while (true) { try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public void destroy() { System.out.println("End servlet: " + getServletInfo()); super.destroy(); } }