From 06bf8835d34e1324db88079fca02dab451d60a50 Mon Sep 17 00:00:00 2001 From: Notmoo Date: Wed, 7 Jun 2017 18:31:05 +0200 Subject: [PATCH] Ajout servlet calibration request --- src/main/java/core/dao/HibernateDao.java | 15 +++++++++++++++ src/main/java/core/repository/Location.java | 8 +++++++- src/main/java/core/service/CalibrationService.java | 3 +++ src/main/java/servlet/APCalibrationServlet.java | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/servlet/CalibrationServlet.java | 48 ++++++++++++++++++++++++++++++++++++++++-------- src/main/java/servlet/PositioningServlet.java | 6 +++--- src/main/webapp/WEB-INF/web.xml | 13 ++++++++++++- 7 files changed, 126 insertions(+), 13 deletions(-) create mode 100644 src/main/java/servlet/APCalibrationServlet.java diff --git a/src/main/java/core/dao/HibernateDao.java b/src/main/java/core/dao/HibernateDao.java index 410afba..ef6b346 100644 --- a/src/main/java/core/dao/HibernateDao.java +++ b/src/main/java/core/dao/HibernateDao.java @@ -163,6 +163,20 @@ public class HibernateDao { return reply; } + + public int saveLocation(Location location) { + TransactionCallBack callBack = execTransactionProcess((session)->{ + TransactionCallBack reply = new TransactionCallBack(); + Integer id = (Integer) session.save(location); + if(id!=null) + reply.results.add(id); + return reply; + }); + + if(callBack!=null && callBack.results.size()>0) + return (Integer)callBack.results.get(0); + return -1; + } public Location getLocation(int Location) { TransactionCallBack callBack = execTransactionProcess((session)->{ TransactionCallBack reply = new TransactionCallBack(); @@ -178,6 +192,7 @@ public class HibernateDao { return (callBack.getResults().isEmpty()?null:(Location)callBack.getResults().get(0)); } + private interface ITransactionProcess{ TransactionCallBack exec(Session tr); } diff --git a/src/main/java/core/repository/Location.java b/src/main/java/core/repository/Location.java index 410ddbd..970a768 100644 --- a/src/main/java/core/repository/Location.java +++ b/src/main/java/core/repository/Location.java @@ -19,7 +19,13 @@ public class Location implements Serializable { public Location () { } - + + public Location(double posx, double posy, Map map) { + this.x = posx; + this.y = posy; + this.map = map; + } + public Integer getId(){return id;} public void setId(Integer id){this.id = id;} diff --git a/src/main/java/core/service/CalibrationService.java b/src/main/java/core/service/CalibrationService.java index 0a4c30a..a34f89b 100644 --- a/src/main/java/core/service/CalibrationService.java +++ b/src/main/java/core/service/CalibrationService.java @@ -29,4 +29,7 @@ public class CalibrationService { return dao.saveAccessPoint(ap); } public List getAllAccessPoints(){return dao.getAccessPoint();} + public int registerLocation(double posx, double posy, int mapId){ + return dao.saveLocation(new Location(posx, posy, dao.getMap(mapId))); + } } diff --git a/src/main/java/servlet/APCalibrationServlet.java b/src/main/java/servlet/APCalibrationServlet.java new file mode 100644 index 0000000..be4e8c6 --- /dev/null +++ b/src/main/java/servlet/APCalibrationServlet.java @@ -0,0 +1,46 @@ +package servlet; + +import core.service.CalibrationService; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * Created by Guillaume on 07/06/2017. + */ +public class APCalibrationServlet extends HttpServlet { + + @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 execute(final HttpServletRequest servletRequest, final HttpServletResponse servletResponse) throws ServletException, IOException { + + try { + int locId = Integer.parseInt(servletRequest.getParameter("LOCATION_ID")); + String apMacAddr = servletRequest.getParameter("AP_MAC_ADDRESS"); + double val = Double.parseDouble(servletRequest.getParameter("VAL")); + + new CalibrationService().addCalibrationData(locId, apMacAddr, val); + }catch(Exception e){ + e.printStackTrace(); + try{ + servletResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + }catch(IllegalStateException ex){ + ex.printStackTrace(); + } + } + } +} diff --git a/src/main/java/servlet/CalibrationServlet.java b/src/main/java/servlet/CalibrationServlet.java index 4f9a4d5..ccf0281 100644 --- a/src/main/java/servlet/CalibrationServlet.java +++ b/src/main/java/servlet/CalibrationServlet.java @@ -7,21 +7,36 @@ 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{ - @Override - public void service (final HttpServletRequest servletRequest, final HttpServletResponse servletResponse) + + public void execute (final HttpServletRequest servletRequest, final HttpServletResponse servletResponse) throws ServletException, IOException { try { - int locId = Integer.parseInt(servletRequest.getParameter("LOCATION_ID")); - String apMacAddr = servletRequest.getParameter("AP_MAC_ADDRESS"); - double val = Double.parseDouble(servletRequest.getParameter("VAL")); + 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")); - new CalibrationService().addCalibrationData(locId, apMacAddr, val); + 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{ @@ -35,12 +50,29 @@ public class CalibrationServlet extends HttpServlet{ @Override public void doGet(final HttpServletRequest servletRequest, final HttpServletResponse servletResponse) throws ServletException, IOException { - service(servletRequest, servletResponse); + execute(servletRequest, servletResponse); } @Override public void doPost(final HttpServletRequest servletRequest, final HttpServletResponse servletResponse) throws ServletException, IOException { - service(servletRequest, servletResponse); + 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(); + } } } diff --git a/src/main/java/servlet/PositioningServlet.java b/src/main/java/servlet/PositioningServlet.java index e54e54f..0b02fee 100644 --- a/src/main/java/servlet/PositioningServlet.java +++ b/src/main/java/servlet/PositioningServlet.java @@ -24,10 +24,10 @@ public class PositioningServlet extends HttpServlet{ throws ServletException, IOException { - String clientIpAddr = servletRequest.getParameter("CLIENT_IP"); + String clientMacAddr = servletRequest.getParameter("CLIENT_MAC_ADDR"); PositioningService posServ = new PositioningService(); - multicastPositioningRequest(posServ.getMacAddr(clientIpAddr)); + multicastPositioningRequest(clientMacAddr); Location loc = null; @@ -38,7 +38,7 @@ public class PositioningServlet extends HttpServlet{ e.printStackTrace(); } - loc = posServ.getLocation(clientIpAddr); + loc = posServ.getLocation(clientMacAddr); }while(loc==null); servletResponse.setContentType("text/plain"); diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index c629d30..66be5fe 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -13,7 +13,18 @@ calibrationServlet - /calibration + /calibration/request + + + + + apCalibrationServlet + classes.APCalibrationServlet + + + + apCalibrationServlet + /ap/calibration -- libgit2 0.21.4