CalibrationServlet.java 2.81 KB
package servlet;

import core.service.CalibrationService;

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 java.util.Random;

/**
 * Created by Guillaume on 15/05/2017.
 */
public class CalibrationServlet extends HttpServlet{

    public void execute (final HttpServletRequest servletRequest, final HttpServletResponse servletResponse)
            throws ServletException, IOException {

        try {
            String clientMacAddr = servletRequest.getParameter("CLIENT_MAC_ADDR");
            int mapId = Integer.parseInt(servletRequest.getParameter("MAP_ID"));
            double posx = Double.parseDouble(servletRequest.getParameter("X"));
            double posy = Double.parseDouble(servletRequest.getParameter("Y"));

            Integer locationId = new CalibrationService().registerLocation(posx, posy, mapId);
            if(locationId!=-1){
                multicastCalibrationRequest(clientMacAddr, locationId);
            }else{
                try{
                    servletResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                }catch(IllegalStateException ex){
                    ex.printStackTrace();
                }
            }
        }catch(Exception e){
            e.printStackTrace();
            try{
                servletResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            }catch(IllegalStateException ex){
                ex.printStackTrace();
            }
        }
    }
    
    @Override
    public void doGet(final HttpServletRequest servletRequest, final HttpServletResponse servletResponse)
            throws ServletException, IOException {
        execute(servletRequest, servletResponse);
    }
    
    @Override
    public void doPost(final HttpServletRequest servletRequest, final HttpServletResponse servletResponse)
            throws ServletException, IOException {
        execute(servletRequest, servletResponse);
    }

    private void multicastCalibrationRequest(String clientMacAddress, int locationId){
        try (DatagramSocket socket = new DatagramSocket(4445)){

            byte[] buf = new byte[256];

            String dString = "CALIB=" + clientMacAddress + ";SERV=" + Inet4Address.getLocalHost().getHostAddress()+";LOC_ID="+locationId+";";
            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();
        }
    }
}