summaryrefslogblamecommitdiffstats
path: root/gearman/controllerWorker/ControllerWorker/Client.java
blob: c3fb95bbf6ae9915d7bb6777f1762e5c4ffb7cc0 (plain) (tree)
1
2
3
4
5
6
7
8
9

                         
                               

                        
                                        
                                     
                                         
                                  
                                 





                                  

                                 

                                             

                                 
                                      
                             
 
                                                                                
                                           

                                           




                                                                          
                                                   



                                                     







                                               









                                                                
                                                             




















                                                                     
                                                              






                                      
                                        













                                  

                                       

         




                                                                               


                                                  
 










                                            






                                                                                       

                                                                      
                                    










                                                                                             
                                                       
                                                                     

                                                                                            

                                          
 
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;
	private int statusUpdateCount;
	private int scsavPID;

	public Client(JSONObject clientJsonObj, String type, String eventName) {
		this.statusUpdateCount = 0;
		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 = "";
		state = ClientState.CLIENT_UNKNOWN;
		times = new Vector<ClientPingTime>();
		jobs = new Vector<ClientJob>();
	}

	public int getScsavPID() {
		return scsavPID;
	}

	public void setScsavPID(int scsavPID) {
		this.scsavPID = scsavPID;
	}

	public GearmanJob getJob(int jobType) {
		for (ClientJob job : jobs) {
			if (job.getJobType() == jobType) {
				return job.getGearmanJob();
			}
		}
		return null;
	}

	public void addJob(int jobType, GearmanJob gearmanJob) {
		jobs.add(new ClientJob(jobType, gearmanJob));
	}

	public void removeJob(GearmanJob gearmanJob) {
		for (ClientJob job : jobs) {
			if (job.getGearmanJob().equals(gearmanJob)) {
				jobs.remove(job);
				break;
			}
		}
	}

	public long getPingTime(int timeType) {
		for (ClientPingTime time : times) {
			if (time.getType() == timeType) {
				return time.getTime();
			}
		}
		return 0;
	}

	public void addPingTime(int timeType, long time) {
		times.add(new ClientPingTime(timeType, time));
	}

	public int getId() {
		return id;
	}

	public String getStateText() {
		return state.toString();
	}

	public String getError() {
		return error;
	}

	public String getIp() {
		return ip;
	}

	public String getMac() {
		return mac;
	}

	public ClientState getState() {
		return state;
	}

	public void setState(ClientState state_, GearmanClient gearmanClient) {
		state = state_;
		publishStateChange(gearmanClient);
	}

	public void setState(ClientState state_) {
		state = state_;
	}

	public void setError(String error) {
		this.error = error;
	}

	public Boolean isFinished() {
		return finished;
	}

	public void finish() {
		this.finished = true;
	}

	@Override
	public String toString() {
		return "Client [error=" + error + ", finished=" + finished + ", id="
				+ id + ", ip=" + ip + ", jobs=" + jobs + ", mac=" + mac
				+ ", state=" + state + ", times=" + times + "]";
	}

	private void publishStateChange(GearmanClient gearmanClient) {
		statusUpdateCount++;
		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.name());
		String dataString = JSONValue.toJSONString(jsonData);
		GearmanJob job = GearmanJobImpl.createBackgroundJob("status", dataString
				.getBytes(), "status" + eventName + id + statusUpdateCount);
		gearmanClient.submit(job);
	}
}