package controllers; import play.mvc.Controller; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.JsonNodeCreator; import com.fasterxml.jackson.databind.node.JsonNodeFactory; import play.*; import play.db.DB; import play.libs.WS; import play.libs.WS.Response; import play.mvc.*; import play.mvc.Http.RequestBody; public class GCMHandler extends Controller { /* * Register User * */ public static Result RegisterUser() { JsonNode request = request().body().asJson(); String UserId = request.get("fb_user_id").textValue(); String Gcm_Id = request.get("gcm_id").textValue(); // check if user does not exist, if exists, update the gcm_id for user try(Connection conn = DB.getConnection()) { PreparedStatement stmt = conn.prepareStatement("SELECT * FROM `User` WHERE fb_user_id=?"); stmt.setString(1, UserId); ResultSet s =stmt.executeQuery(); if(s.next()) { // user does exist // so update user gcm id PreparedStatement stmtupdate = conn.prepareStatement("UPDATE User SET gcm_id = ? WHERE fb_user_id=?"); stmtupdate.setString(1,Gcm_Id); stmtupdate.setString(2, UserId); stmtupdate.executeUpdate(); } else{ // user does not exist return badRequest(JsonNodeFactory.instance.objectNode().put("error", "user does not exist")); } s.close(); return ok(JsonNodeFactory.instance.objectNode().put("success", "updated gcm id")); }catch(Exception e) { return badRequest(JsonNodeFactory.instance.objectNode().put("error", "error in request:"+e.toString())); } } /* * Messenger * */ public static int sendMessage(ArrayList<String> gcm_ids, long event_id) { // api key String api_key ="AIzaSyDBVU6IDgiH0Asp8FT98y4_TTJTz5sLNWs"; // now that we have the user gcm id, we will send the message JSONObject obj = new JSONObject(); JSONArray gcm_ids_json_array = new JSONArray(); for(int x=0;x<gcm_ids.size();x++) { gcm_ids_json_array.put((gcm_ids).get(x)); } String registration_ids = gcm_ids_json_array.toString(); System.out.println(registration_ids+"\n\n"); JSONObject msg = new JSONObject(); try { msg.put("response", event_id); msg.put("mode", "update_event"); obj.put("data",msg); obj.put("registration_ids", gcm_ids_json_array); } catch (JSONException e) { e.printStackTrace(); return -1; } System.out.println(obj.toString()); WS.url("https://android.googleapis.com/gcm/send") .setContentType("application/json") .setHeader("Authorization","key="+api_key) .post(obj.toString()); return 0; } }