PositioningServlet.java 2.5 KB
package servlet;

import core.repository.Location;
import core.service.PositioningService;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Inet4Address;
import java.net.InetAddress;

import static java.lang.Thread.sleep;

/**
 * Created by Guillaume on 15/05/2017.
 */
public class PositioningServlet extends HttpServlet{
    @Override
    public void service (final HttpServletRequest servletRequest, final HttpServletResponse servletResponse)
            throws ServletException, IOException {
    
        
        String clientMacAddr = servletRequest.getParameter("CLIENT_MAC_ADDR");
        PositioningService posServ = new PositioningService();
        
        multicastPositioningRequest(clientMacAddr);
        
        
        Location loc = null;
        do{
            try{
                sleep(500l);
            } catch (InterruptedException e) {
               e.printStackTrace();
            }
    
            loc = posServ.getLocation(clientMacAddr);
        }while(loc==null);
        
        servletResponse.setContentType("text/plain");
        servletResponse.getWriter().print(String.format("{x:%f;y:%f;map:%d}", loc.getX(), loc.getY(), loc.getMap().getId()));
    }
    
    @Override
    public void doGet(final HttpServletRequest servletRequest, final HttpServletResponse servletResponse)
            throws ServletException, IOException {
        service(servletRequest, servletResponse);
    }
    
    @Override
    public void doPost(final HttpServletRequest servletRequest, final HttpServletResponse servletResponse)
            throws ServletException, IOException {
        service(servletRequest, servletResponse);
    }
    
    private void multicastPositioningRequest(String clientMacAddress){
        try (DatagramSocket socket = new DatagramSocket(4445)){
            
            byte[] buf = new byte[256];
        
            String dString = "LOCATE=" + clientMacAddress + ";SERV=" + Inet4Address.getLocalHost().getHostAddress();
            buf = dString.getBytes();
        
            // send it
            InetAddress group = InetAddress.getByName("230.0.0.1");
            DatagramPacket packet = new DatagramPacket(buf, buf.length, group, 4446);
            socket.send(packet);
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
}