package org.cloudfoundry.picalc.messaging;
import org.cloudfoundry.runtime.env.CloudEnvironment;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class WorkerHandler {
private static final Logger logger = LoggerFactory.getLogger(WorkerHandler.class);
private int instanceIndex = -1;
public WorkerHandler() {
CloudEnvironment environment = new CloudEnvironment();
if (environment.getInstanceInfo() != null) {
instanceIndex = environment.getInstanceInfo().getInstanceIndex();
}
}
private double calculatePiFor(int start, int nrOfElements) {
double acc = 0.0;
for (int i = start * nrOfElements; i <= ((start + 1) * nrOfElements - 1); i++) {
acc += 4.0 * (1 - (i % 2) * 2) / (2 * i + 1);
}
return acc;
}
public ResultMessage handleMessage(WorkMessage workMessage) {
int startNumber = workMessage.getStart();
if (startNumber % 100 == 0) {
logger.info("Worker " + "(" + instanceIndex + ") Received " + workMessage);
}
double result = calculatePiFor(workMessage.getStart(), workMessage.getNrOfElements());
ResultMessage resultMessage = new ResultMessage();
resultMessage.setCorrelationId(workMessage.getCorrelationId());
resultMessage.setResult(result);
//logger.debug("Working Returning " + resultMessage);
return resultMessage;
}
}