package ControllerWorker; import java.util.HashMap; import java.util.Vector; import org.gearman.client.GearmanJobResult; import org.gearman.client.GearmanJobResultImpl; import org.gearman.util.ByteUtils; import org.gearman.worker.AbstractGearmanFunction; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.JSONValue; public class ShutdownWorker extends AbstractGearmanFunction { @Override public String getName() { return "shutdown"; } @Override public GearmanJobResult executeFunction() { String data = ByteUtils.fromUTF8Bytes((byte[]) this.data); Vector> clients = new Vector>(); JSONObject jsonObject = (JSONObject) JSONValue.parse(data); String event = jsonObject.get("eventName").toString(); String host = jsonObject.get("host").toString(); int port = Integer.parseInt(jsonObject.get("port").toString()); int updateRate = Integer.parseInt(jsonObject.get("updateRate") .toString()); long waitTime = Long.parseLong(jsonObject.get("waitTime").toString()); JSONArray jsonArray = (JSONArray) jsonObject.get("clients"); for (Object clientObj : jsonArray) { JSONObject clientJsonObj = (JSONObject) clientObj; HashMap clientMap = new HashMap(); clientMap.put("id", clientJsonObj.get("id").toString()); clientMap.put("ip", clientJsonObj.get("ip").toString()); clientMap.put("mac", clientJsonObj.get("mac").toString()); clients.add(clientMap); } JSONArray whitelist = (JSONArray) jsonObject.get("whitelist"); JSONArray blacklist = (JSONArray) jsonObject.get("blacklist"); Vector psWhitelist = new Vector(); Vector psBlacklist = new Vector(); for (Object whiteEntry : whitelist) { psWhitelist.add(whiteEntry.toString()); } for (Object blackEntry : blacklist) { psBlacklist.add(blackEntry.toString()); } Shutdown shutdown = new Shutdown(host, port, clients, updateRate, waitTime, psWhitelist, psBlacklist); StatusWorker.SHUTDOWNTHREADS.put(event, shutdown); shutdown.start(); System.out.println("Shutdown started"); String res = "Shutdown started"; byte[] warnings = new byte[0]; byte[] exceptions = new byte[0]; int numerator = 0; int denominator = 0; GearmanJobResult gjr = new GearmanJobResultImpl(this.jobHandle, true, res.getBytes(), warnings, exceptions, numerator, denominator); return gjr; } }