package net.johnewart.gearman.common.packets.response; import net.johnewart.gearman.common.JobState; import net.johnewart.gearman.common.JobStatus; import net.johnewart.gearman.constants.PacketType; import java.util.concurrent.atomic.AtomicReference; public class WorkStatus extends ResponsePacket { private AtomicReference<String> jobHandle; private int completenumerator; private int completedenominator; public WorkStatus() { } public WorkStatus(String jobhandle, int numerator, int denominator) { this.jobHandle = new AtomicReference<String>(jobhandle); this.completenumerator = numerator; this.completedenominator = denominator; this.type = PacketType.WORK_STATUS; } public WorkStatus(JobStatus jobStatus) { this.jobHandle = new AtomicReference<>(jobStatus.getJobHandle()); this.completedenominator = jobStatus.getDenominator(); this.completenumerator = jobStatus.getNumerator(); this.type = PacketType.WORK_STATUS; } public WorkStatus(byte[] pktdata) { super(pktdata); jobHandle = new AtomicReference<String>(); AtomicReference<String> numerator = new AtomicReference<String>(); AtomicReference<String> denominator = new AtomicReference<String>(); int pOff = 0; pOff = parseString(pOff, jobHandle); pOff = parseString(pOff, numerator); pOff = parseString(pOff, denominator); try { completedenominator = Integer.valueOf(denominator.get()); } catch (NumberFormatException nfe) { completedenominator = -1; } try { completenumerator = Integer.valueOf(numerator.get()); } catch (NumberFormatException nfe) { completenumerator = -1; } } @Override public byte[] toByteArray() { byte[] metadata = stringsToTerminatedByteArray(false, jobHandle.get(), String.valueOf(completenumerator), String.valueOf(completedenominator)); return concatByteArrays(getHeader(), metadata); } @Override public int getPayloadSize() { return this.jobHandle.get().length() + 1 + String.valueOf(completenumerator).length() + 1 + String.valueOf(completedenominator).length(); } public String getJobHandle() { return jobHandle.get(); } public int getCompleteNumerator() { return completenumerator; } public int getCompleteDenominator() { return completedenominator; } public JobStatus toJobStatus() { return new JobStatus( completenumerator, completedenominator, JobState.WORKING, getJobHandle() ); } }