package edu.harvard.econcs.turkserver.client;
import java.util.Map;
import java.util.Random;
import com.google.common.collect.ImmutableMap;
import edu.harvard.econcs.turkserver.api.BroadcastMessage;
import edu.harvard.econcs.turkserver.api.ClientController;
import edu.harvard.econcs.turkserver.api.ClientError;
import edu.harvard.econcs.turkserver.api.ExperimentClient;
import edu.harvard.econcs.turkserver.api.FinishExperiment;
import edu.harvard.econcs.turkserver.api.ServiceMessage;
import edu.harvard.econcs.turkserver.api.StartExperiment;
import edu.harvard.econcs.turkserver.api.StartRound;
import edu.harvard.econcs.turkserver.api.TimeLimit;
@ExperimentClient
public class TestClient {
public volatile String lastCall = null;
public volatile boolean started = false;
public volatile boolean finished = false;
ClientController cont;
volatile String message = null;
volatile int delay;
Random rnd = new Random();
public TestClient(ClientController cont) {
this.cont = cont;
}
public void setMessage(String message, int delay) {
this.message = message;
this.delay = delay;
}
public ClientController getController() {
return cont;
}
@StartExperiment
void startExp() {
lastCall = "startExp";
started = true;
}
@StartRound
void startRound(int n) {
lastCall = "startRound";
if( message == null ) return;
new Thread() {
public void run() {
try { Thread.sleep(rnd.nextInt(delay)); }
catch (InterruptedException e) {}
cont.sendExperimentBroadcast(ImmutableMap.of("msg", (Object) message));
}
}.start();
}
@TimeLimit
void timeLimit() {
lastCall = "timeLimit";
}
@FinishExperiment
void finishExp() {
lastCall = "finishExp";
finished = true;
}
@ClientError
void clientError(String err) {
lastCall = "clientError";
}
@BroadcastMessage
void broadcast(Map<String, Object> msg) {
System.out.println("Got broadcast: " + msg);
lastCall = "broadcast";
}
@ServiceMessage
void service(Map<String, Object> msg) {
System.out.println("Got service: " + msg);
lastCall = "service";
}
}