/*
* Copyright 2013, Cristiano Costantini, Giuseppe Gerla, Michele Ficarra, Sergio Ciampi, Stefano
* Cigheri.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.developers.gdgfirenze.mockep;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
/**
* The Class ArduinoSimulator.
*
* It simulates the messages sent by the arduino sensormix project.
*/
public class AndroidSimulator {
private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 10000; i++) {
try {
Thread.sleep(5000);
JSONObject data = createJsonUpdatePacket();
postData("http://localhost:10080/sensormixSamplesEndpoint", data);
} catch (JSONException | IOException e) {
System.out.println("Error on sending sample: " + e.getMessage());
}
}
}
private static void postData(String url, JSONObject jsonSamplePacket)
throws ClientProtocolException, IOException {
HttpParams myParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(myParams, 10000);
HttpConnectionParams.setSoTimeout(myParams, 10000);
HttpClient httpclient = new DefaultHttpClient(myParams);
HttpPost httppost = new HttpPost(url.toString());
httppost.setHeader("Content-type", "application/json");
StringEntity se = new StringEntity(jsonSamplePacket.toString());
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
httppost.setEntity(se);
HttpResponse response = httpclient.execute(httppost);
String temp = EntityUtils.toString(response.getEntity());
System.out.println("JSON post response: " + temp);
}
private static JSONObject createJsonUpdatePacket() throws JSONException {
Random rand = new Random();
JSONObject root = new JSONObject();
JSONObject obj = new JSONObject();
root.put("sample", obj);
obj.put("device_id", "urn:rixf:org.android/sensor_id");
obj.put("time", dateFormat.format(new Date()));
obj.put("battery_level", 10.0 + rand.nextDouble() * 20.0);
JSONObject positionObj = new JSONObject();
positionObj.put("lat", 42.5 + rand.nextDouble());
positionObj.put("lng", 10.5 + rand.nextDouble());
positionObj.put("alt", 100.0);
positionObj.put("time", dateFormat.format(new Date()));
positionObj.put("accuracy", 10.0);
positionObj.put("bearing", 360.0 * rand.nextDouble());
positionObj.put("speed", 0.0);
obj.put("position", positionObj);
JSONArray scanresultsObj = new JSONArray();
JSONObject scanObj = new JSONObject();
scanObj.put("frequency", 2400.0);
scanObj.put("level", -10.0 - 20.0 * rand.nextDouble());
scanObj.put("bssid", "BSSID");
scanObj.put("capabilities", "[]");
scanObj.put("ssid", "SSID");
scanresultsObj.put(scanObj);
obj.put("wifi_scans", scanresultsObj);
return root;
}
}