package thaw.fcp;
import java.util.Observable;
import java.util.Observer;
import java.util.Hashtable;
public class FCPGetNode extends Observable implements FCPQuery, Observer {
public final static String[] refElements = {
"identity",
"location",
"testnet",
"myName",
"lastGoodVersion",
"sig",
"version",
"dsaPubKey.y",
"physical.udp",
"dsaGroup.g",
"dsaGroup.q",
"dsaGroup.p",
"ark.pubURI",
"ark.number",
"auth.negTypes"
};
private String ref;
public final static String maxMemElement = "volatile.maximumJavaMemory";
private long maxMem = 134217728;
public final static String usedMemElement = "volatile.usedJavaMemory";
private long usedMem = 0;
public final static String nmbThreadsElement = "volatile.runningThreadCount";
private int nmbThreads = 0;
private boolean withPrivate;
private boolean withVolatile;
private Hashtable allParameters;
public FCPGetNode(boolean withPrivate, boolean withVolatile) {
this.withPrivate = withPrivate;
this.withVolatile = withVolatile;
}
public boolean start(FCPQueueManager queueManager) {
FCPMessage msg = new FCPMessage();
msg.setMessageName("GetNode");
msg.setValue("WithPrivate", Boolean.toString(withPrivate));
msg.setValue("WithVolatile", Boolean.toString(withVolatile));
queueManager.getQueryManager().addObserver(this);
return queueManager.getQueryManager().writeMessage(msg);
}
public boolean stop(FCPQueueManager queueManager) {
queueManager.getQueryManager().deleteObserver(this);
return true;
}
public int getQueryType() {
return 0;
}
public void update(Observable o, Object param) {
if (o instanceof FCPQueryManager) {
final FCPMessage msg = (FCPMessage)param;
if (msg.getMessageName() == null
|| !msg.getMessageName().equals("NodeData"))
return;
ref = "";
for (int i = 0 ; i < refElements.length ; i++) {
if (msg.getValue(refElements[i]) != null)
ref += refElements[i] + "=" +
msg.getValue(refElements[i])
+ "\n";
}
ref += "End\n";
if (withVolatile) {
if (msg.getValue(maxMemElement) != null)
maxMem = Long.parseLong(msg.getValue(maxMemElement));
if (msg.getValue(usedMemElement) != null)
usedMem = Long.parseLong(msg.getValue(usedMemElement));
if (msg.getValue(nmbThreadsElement) != null)
nmbThreads = Integer.parseInt(msg.getValue(nmbThreadsElement));
}
allParameters = msg.getValues();
setChanged();
notifyObservers(this);
}
}
/**
* Darknet ref.
* Not really maintained anymore. Please report if outdated
*/
public String getRef() {
return ref;
}
public long getMaxJavaMemory() {
return maxMem;
}
public long getUsedJavaMemory() {
return usedMem;
}
public int getNmbThreads() {
return nmbThreads;
}
public Hashtable getAllParameters() {
return allParameters;
}
}