summaryrefslogtreecommitdiffstats
path: root/gearman/controllerWorker/ControllerWorker/Client.java
diff options
context:
space:
mode:
Diffstat (limited to 'gearman/controllerWorker/ControllerWorker/Client.java')
-rwxr-xr-xgearman/controllerWorker/ControllerWorker/Client.java36
1 files changed, 34 insertions, 2 deletions
diff --git a/gearman/controllerWorker/ControllerWorker/Client.java b/gearman/controllerWorker/ControllerWorker/Client.java
index 86d21b5..deb3246 100755
--- a/gearman/controllerWorker/ControllerWorker/Client.java
+++ b/gearman/controllerWorker/ControllerWorker/Client.java
@@ -1,27 +1,35 @@
package ControllerWorker;
+import java.util.LinkedHashMap;
import java.util.Vector;
+import org.gearman.client.GearmanClient;
import org.gearman.client.GearmanJob;
+import org.gearman.client.GearmanJobImpl;
import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
public class Client {
private int id;
private String ip;
private String mac;
private ClientState state;
+ private String type;
+ private String eventName;
private Vector<ClientPingTime> times;
private Vector<ClientJob> jobs;
private String error;
private Boolean finished;
- public Client(JSONObject clientJsonObj, String initialStateText) {
+ public Client(JSONObject clientJsonObj, String type, String eventName) {
+ this.type = type;
+ this.eventName = eventName;
id = Integer.parseInt(clientJsonObj.get("id").toString());
ip = clientJsonObj.get("ip").toString();
mac = clientJsonObj.get("mac").toString();
finished = false;
error = "";
- setState(ClientState.CLIENT_UNKNOWN);
+ state = ClientState.CLIENT_UNKNOWN;
times = new Vector<ClientPingTime>();
jobs = new Vector<ClientJob>();
}
@@ -85,6 +93,11 @@ public class Client {
return state;
}
+ public void setState(ClientState state_, GearmanClient gearmanClient) {
+ state = state_;
+ publishStateChange(gearmanClient);
+ }
+
public void setState(ClientState state_) {
state = state_;
}
@@ -107,4 +120,23 @@ public class Client {
+ id + ", ip=" + ip + ", jobs=" + jobs + ", mac=" + mac
+ ", state=" + state + ", times=" + times + "]";
}
+
+ private void publishStateChange(GearmanClient gearmanClient) {
+ LinkedHashMap<String, Object> jsonData = new LinkedHashMap<String, Object>();
+ if (type.equals("boot")) {
+ jsonData.put("type", "updateClientStateBoot");
+ } else if (type.equals("shutdown")) {
+ jsonData.put("type", "updateClientStateShutdown");
+ } else {
+ return;
+ }
+ jsonData.put("eventName", eventName);
+ jsonData.put("clientID", id);
+ jsonData.put("error", error);
+ jsonData.put("newState", state.toString());
+ String dataString = JSONValue.toJSONString(jsonData);
+ GearmanJob job = GearmanJobImpl.createJob("status", dataString
+ .getBytes(), "status" + eventName);
+ gearmanClient.submit(job);
+ }
} \ No newline at end of file