package com.amazonaws.services.kinesis.app; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.sql.SQLException; import java.util.HashSet; import java.util.List; import com.amazonaws.services.dynamodb.loader.Loader; import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessor; import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessorCheckpointer; import com.amazonaws.services.kinesis.clientlibrary.types.ShutdownReason; import com.amazonaws.services.kinesis.model.Record; import com.amazonaws.util.json.JSONException; import com.amazonaws.util.json.JSONObject; /** * Processor * * Message format : <user id>,<latitude>,<longitude> * eg. * 10290,35.40.100,139.45.205 * 20135,35.38.200,139.35.208 * ... * **/ public class Processor implements IRecordProcessor { private long counter; private int target; private HashSet<String> users; private CoordinateListener coordsListener; private LogAnalyzer logAnalyzer; private Loader loader; private byte[] bytearray; public Processor() { counter = 0; target = 50; bytearray = new byte[128]; } @Override public void initialize(String arg0) { coordsListener = new CoordinateListener(); try { logAnalyzer = new LogAnalyzer(); loader = new Loader(); users = logAnalyzer.getUsers(); } catch (SQLException e) { e.printStackTrace(); System.exit(1); } } @Override public void processRecords(List<Record> arg0, IRecordProcessorCheckpointer arg1) { counter += arg0.size(); if (counter > target) { System.out.println("Received : " + counter + " records"); target += target; } Record rec; for(int i = 0; i < arg0.size(); i++) { rec = arg0.get(i); try { verifyRecord(rec.getData()); } catch (JSONException | UnsupportedEncodingException e) { e.printStackTrace(); } } } private boolean verifyRecord(ByteBuffer buffer) throws JSONException, UnsupportedEncodingException { buffer.get(bytearray, 0, buffer.remaining()); JSONObject json = new JSONObject(new String(bytearray, "UTF-8")); String user = json.getString("user"); if (users.contains(user)) { MessageProxy proxy = MessageProxy.getInstance(); double x = json.getDouble("latitude"); double y = json.getDouble("longitude"); proxy.sendMesg(user + "," + json.getDouble("latitude") + "," + json.getDouble("longitude")); System.out.println(x + "," + y); if (coordsListener.verifyCoordinates(x, y)) { System.out.println("Matched! '" + user + "' is at (" + x + ", " + y + ")"); loader.put(user, System.currentTimeMillis(), x, y); return true; } } return false; } @Override public void shutdown(IRecordProcessorCheckpointer arg0, ShutdownReason arg1) { } public void test() throws JSONException, UnsupportedEncodingException { String str = "00001,35.65,139.65"; initialize("test"); ByteBuffer buffer = ByteBuffer.allocateDirect(128); buffer.put(str.getBytes()); buffer.flip(); verifyRecord(buffer); } }