package com.neverwinterdp.vm.command;
import java.util.List;
import com.neverwinterdp.registry.event.NodeEvent;
import com.neverwinterdp.registry.event.NodeWatcher;
import com.neverwinterdp.registry.Registry;
import com.neverwinterdp.vm.VM;
public class VMCommandWatcher extends NodeWatcher {
private VM vm;
public VMCommandWatcher(VM vm) {
this.vm = vm ;
}
private long seqTracker = 0 ;
@Override
synchronized public void onEvent(NodeEvent event) {
if(NodeEvent.Type.CHILDREN_CHANGED == event.getType()) {
String path = event.getPath();
try {
Registry registry = vm.getVMRegistry().getRegistry() ;
registry.watchChildren(path, this);
List<String> cmdPathNames = registry.getChildren(path, true);
//System.out.println("path = " + path + ", children = " + cmdPathNames.size());
for(String cmdPathName : cmdPathNames) {
String seq = cmdPathName.substring("command-".length()) ;
long seqId = Long.parseLong(seq);
//System.out.println(" cmdPathName " + cmdPathName);
if(seqId == seqTracker++) {
String cmdPath = path + "/" + cmdPathName;
CommandPayload payload = registry.getDataAs(cmdPath, CommandPayload.class);
Command command = payload.getCommand();
CommandResult<?> result = command.execute(vm);
payload.setResult(result);
registry.setData(cmdPath, payload);
}
}
} catch (Throwable e) {
e.printStackTrace();
}
}
}
}