/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package Haze;
import Dengue.CDengueFactory;
import Entity.CDengueCluster;
import Network.CNetworkFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.net.InetAddress;
import java.net.Socket;
import java.nio.channels.Channels;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.XML;
/**
*
* @author Bryden
*/
public class CHazeManager {
private static final ScheduledExecutorService objScheduler
= Executors.newScheduledThreadPool(1);
public static void schedulePolling() {
final Runnable poller = () -> {
loadHazeInfo();
};
objScheduler.scheduleAtFixedRate(poller, 0, 30, TimeUnit.MINUTES);
}
public static void loadHazeInfo() {
String strOutput = "";
try {
strOutput = CNetworkFactory.createHazeRequest().sendRequest();
} catch (IOException ex) {
}
if (strOutput.isEmpty()) {
return;
}
JSONArray aryRegions = XML.toJSONObject(
strOutput
).getJSONObject("channel")
.getJSONObject("item")
.getJSONArray("region");
StringBuilder objSB = new StringBuilder();
objSB.append("[");
for (int i = 0; i < aryRegions.length(); i++) {
objSB.append("{\"region\" : ");
JSONObject objRegion = (JSONObject) aryRegions.get(i);
objSB.append("\"");
objSB.append(objRegion.getString("id"));
objSB.append("\",");
JSONArray aryReadings = objRegion.getJSONObject("record").getJSONArray("reading");
for (int x = 0; x < aryReadings.length(); x++) {
JSONObject objReading = (JSONObject) aryReadings.get(x);
if (objReading.getString("type").equalsIgnoreCase("NPSI")) {
objSB.append("\"psi\" : ");
objSB.append(objReading.getInt("value"));
objSB.append("},");
}
}
}
objSB.deleteCharAt(objSB.lastIndexOf(","));
objSB.append("]");
sendInfoToCPU(objSB.toString(), 33010);
}
private static void sendInfoToCPU(String pStrJSON, int pIntPort) {
new Thread(() -> {
try (Socket client = new Socket(InetAddress.getLocalHost(), pIntPort)) {
Writer objWriter = Channels.newWriter(Channels.newChannel(client.getOutputStream()), StandardCharsets.US_ASCII.name());
objWriter.write(pStrJSON);
objWriter.flush();
client.shutdownOutput();
try (Reader objReader = Channels.newReader(Channels.newChannel(client.getInputStream()), StandardCharsets.US_ASCII.name());
BufferedReader objOutReader = new BufferedReader(objReader)) {
System.out.println((char) objOutReader.read());
}
} catch (IOException e) {
System.out.println(e);
}
}).start();
}
}