/*
* 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 Dengue;
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;
/**
*
* @author Bryden
*/
public class CDengueManager {
private static final ScheduledExecutorService objScheduler
= Executors.newScheduledThreadPool(1);
public static void schedulePolling() {
final Runnable poller = () -> {
loadDengueCluster();
};
objScheduler.scheduleAtFixedRate(poller, 0, 30, TimeUnit.MINUTES);
}
public static void loadDengueCluster() {
List<CDengueCluster> lstCluster = new ArrayList<>();
String strJson = "";
try {
strJson = CNetworkFactory.createDengueClusterRequest().sendRequest();
} catch (IOException ex) {
}
if (strJson.isEmpty()) {
return;
}
JSONArray objArray = new JSONObject(strJson).getJSONArray("SrchResults");
int intCount = objArray.getJSONObject(0).getInt("FeatCount");
for (int intCounter = 1; intCounter <= intCount; intCounter++) {
lstCluster.add(CDengueFactory.loadCluster(objArray.getJSONObject(intCounter)));
}
StringBuilder objSB = new StringBuilder();
objSB.append("[");
for (CDengueCluster objCluster : lstCluster) {
objSB.append(objCluster.toJSON());
objSB.append(",");
}
objSB.deleteCharAt(objSB.lastIndexOf(","));
objSB.append("]");
sendInfoToCPU(objSB.toString(), 33009);
}
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();
}
}