package com.replica.replicaisland; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; public class EventReporter implements Runnable { public final static int EVENT_DEATH = 0; public final static int EVENT_BEAT_LEVEL = 1; public final static int EVENT_BEAT_GAME = 2; public final static String REPORT_SERVER = null; // insert your server here. private class Event { public String eventType; public float x; public float y; public float time; public String level; public int version; public long session; } private Object mLock = new Object(); private ArrayList mEvents = new ArrayList(); private ArrayList mProcessedEvents = new ArrayList(); private boolean mDone = false; public void run() { while (!mDone) { synchronized(mLock) { if (mEvents.isEmpty()) { while (mEvents.isEmpty() && !mDone) { try { mLock.wait(); } catch (InterruptedException e) { } } } mProcessedEvents.addAll(mEvents); mEvents.clear(); } final int count = mProcessedEvents.size(); for (int x = 0; x < count; x++) { recordEvent(mProcessedEvents.get(x)); } mProcessedEvents.clear(); } } public void addEvent(int eventType, float x, float y, float time, String level, int version, long session) { Event event = new Event(); event.x = x; event.y = y; event.time = time; event.level = level; event.version = version; event.session = session; switch (eventType) { case EVENT_DEATH: event.eventType = "death"; break; case EVENT_BEAT_LEVEL: event.eventType = "beatLevel"; break; case EVENT_BEAT_GAME: event.eventType = "beatGame"; break; } synchronized(mLock) { mEvents.add(event); mLock.notifyAll(); } } public void recordEvent(Event event) { URL serverAddress = null; HttpURLConnection connection = null; if (REPORT_SERVER != null) { try { serverAddress = new URL(REPORT_SERVER + "?" + "event=" + event.eventType + "&x=" + event.x + "&y=" + event.y + "&time=" + event.time + "&level=" + URLEncoder.encode(event.level, "UTF-8") + "&version=" + event.version + "&session=" + event.session); //set up out communications stuff connection = null; //Set up the initial connection connection = (HttpURLConnection)serverAddress.openConnection(); connection.setRequestMethod("GET"); connection.setDoOutput(true); connection.setReadTimeout(0); connection.connect(); final int response = connection.getResponseCode(); DebugLog.d("Report Event", event.eventType + " " + response + ":" + connection.getURL().toString()); } catch (Exception e) { // This code can silently fail. //e.printStackTrace(); } finally { //close the connection connection.disconnect(); connection = null; } } } public void stop() { synchronized(mLock) { mDone = true; mLock.notifyAll(); } } }