package eu.hgross.blaubot.fingertracking;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;
import eu.hgross.blaubot.fingertracking.model.Finger;
import eu.hgross.blaubot.fingertracking.model.FingerMessage;
/**
* Takes {@link FingerMessage}s to update a {@link FingerField}.
*
* @author Henning Gross {@literal (mail.to@henning-gross.de)}
*
*/
public class BlauBotTickle {
private final Gson gson = new Gson();
private ConcurrentHashMap<String, FingerMessage> fingers; // ClientUUID -> lastFingerMessage
private FingerField fingerField;
public BlauBotTickle(FingerField field) {
this.fingers = new ConcurrentHashMap<String, FingerMessage>();
this.fingerField = field;
}
/**
* Updates the {@link FingerField} with the contents of a serialized {@link FingerMessage}
* @param message a {@link FingerMessage}'s JSON-Representation as String
*/
public void onMessage(String message) {
FingerMessage fm = gson.fromJson(message, FingerMessage.class);
String uuid = fm.getClientUUID();
fingers.put(uuid, fm);
ArrayList<Finger> drawFingers = new ArrayList<Finger>();
for(FingerMessage fm1 : fingers.values()) {
for(int i=0;i<fm1.getFingers().length ; i++) {
drawFingers.add(fm1.getFingers()[i]);
}
}
fingerField.setFingers(drawFingers);
}
}