package com.geored.servicios.impl; import java.io.IOException; import javax.ejb.EJB; import javax.ejb.Local; import javax.ejb.Stateless; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.Response; import com.geored.servicios.ServicioGCM; import com.geored.servicios.impl.auth.GestionTokens; import com.geored.servicios.impl.gcm.GestionDevices; import com.geored.servicios.json.MensajeJSON; import com.google.android.gcm.server.Message; import com.google.android.gcm.server.Sender; @Local @Stateless public class ImplServicioGCM implements ServicioGCM { private final Sender sender = new Sender("AIzaSyDQ__cG4ZWQgfDTNjexVWvZzI7CyRdQtpU"); private final int RETRY_ATTEMPS = 5; @EJB GestionTokens gestionTokens; @EJB GestionDevices gestionDevices; @Override public void registrarDispositivo(final String userToken, final HttpServletResponse response, final String idDispositivo) { if (gestionTokens.validarToken(userToken)) { response.setStatus(Response.Status.OK.getStatusCode()); gestionDevices.putDevice(gestionTokens.getIdUsuario(userToken), idDispositivo); } else { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } } @Override public void desregistrarDispositivo(final String userToken, final HttpServletResponse response) { if (gestionTokens.validarToken(userToken)) { response.setStatus(Response.Status.OK.getStatusCode()); gestionDevices.removeDevice(gestionTokens.getIdUsuario(userToken)); } else { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } } @Override public void enviarMensaje(final String userToken, final HttpServletResponse response, final MensajeJSON mensaje) { if (gestionTokens.validarToken(userToken)) { try { response.setStatus(Response.Status.OK.getStatusCode()); Message message = new Message.Builder().addData("mensaje", mensaje.getMessage()). addData("idUsuario", gestionTokens.getIdUsuario(userToken).toString()).delayWhileIdle(false).timeToLive(5).build(); String idDevice = gestionDevices.getIdDevice(mensaje.getIdUsuario()); if (idDevice != null) { sender.send(message, idDevice, RETRY_ATTEMPS); } else { response.setStatus(Response.Status.NOT_FOUND.getStatusCode()); } } catch (IOException e) { e.printStackTrace(); response.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); } } else { response.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); } } }