psychose/healthdisplay/src/main/java/de/psychose/MainForm.java

150 lines
5.1 KiB
Java

package de.psychose;
import com.illposed.osc.OSCListener;
import com.illposed.osc.OSCMessage;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.util.Date;
import java.util.Observable;
import java.util.Observer;
/**
* @author: lucas
* @date: 14.04.14 21:43
*/
public class MainForm {
private final ChaOSCclient osCclient;
private JPanel mainPanel;
private ActorDisplay actor1;
private ActorDisplay actor2;
private ActorDisplay actor3;
private StatsDisplay statDisplay;
private PulseControl pulse1;
private PulseControl pulse2;
private PulseControl pulse3;
private int totalMessageCount = 0;
private int messagesTempCounter = 0;
private long totalTraffic = 0;
private long lastTraffic = 0;
public JPanel getMainPanel() {
return mainPanel;
}
public MainForm(final boolean showErrors, final ChaOSCclient chaOSCclient, final SnmpStatClient snmpStatClient) {
this.osCclient = chaOSCclient;
addActor("merle", "Körper 1", actor1, pulse1);
addActor("uwe", "Körper 2", actor2, pulse2);
addActor("bjoern", "Körper 3", actor3, pulse3);
final Timer timer = new Timer(1000, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
statDisplay.setMessagesPerSec(String.valueOf(totalMessageCount - messagesTempCounter));
statDisplay.setMessageCount(String.valueOf(totalMessageCount));
messagesTempCounter = totalMessageCount;
}
});
timer.setRepeats(true);
timer.start();
final Timer snmpTimer = new Timer(5000, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
totalTraffic = snmpStatClient.getTrafficSum(); // in kB
statDisplay.setTotalTraffic(String.valueOf(totalTraffic));
statDisplay.setBandwidth(String.valueOf((totalTraffic - lastTraffic) / 5));
lastTraffic = totalTraffic;
}
});
snmpTimer.setRepeats(true);
if(showErrors) {
actor1.startErrorTimer();
actor2.startErrorTimer();
actor3.startErrorTimer();
snmpTimer.start();
} else {
pulse1.hide();
pulse2.hide();
pulse3.hide();
statDisplay.hide();
}
}
private void addActor(final String actor, final String label, final ActorDisplay actorDisplay, final PulseControl pulse) {
actorDisplay.setCaption(label);
osCclient.addListener("/" + actor.toLowerCase() + "/heartbeat", new OSCListener() {
@Override
public void acceptMessage(Date time, OSCMessage message) {
if (message.getArguments().length == 3) {
totalMessageCount++;
actorDisplay.setHeartbeat(message.getArguments()[0].toString().equals("0") ? "Systole" : "Diastole");
actorDisplay.setPulse(message.getArguments()[1].toString());
actorDisplay.setOxy(message.getArguments()[2].toString());
}
}
});
osCclient.addListener("/" + actor.toLowerCase() + "/ekg", new OSCListener() {
@Override
public void acceptMessage(Date time, OSCMessage message) {
if (message.getArguments().length == 1) {
totalMessageCount++;
actorDisplay.setEkg(message.getArguments()[0].toString());
}
}
});
osCclient.addListener("/" + actor.toLowerCase() + "/emg", new OSCListener() {
@Override
public void acceptMessage(Date time, OSCMessage message) {
if (message.getArguments().length == 1) {
totalMessageCount++;
actorDisplay.setEmg(message.getArguments()[0].toString());
}
}
});
osCclient.addListener("/" + actor.toLowerCase() + "/temperatur", new OSCListener() {
@Override
public void acceptMessage(Date time, OSCMessage message) {
if (message.getArguments().length == 1) {
totalMessageCount++;
actorDisplay.setTemperature(message.getArguments()[0].toString());
}
}
});
osCclient.addListener("/" + actor.toLowerCase() + "/airFlow", new OSCListener() {
@Override
public void acceptMessage(Date time, OSCMessage message) {
if (message.getArguments().length == 1) {
totalMessageCount++;
actorDisplay.setBreath(message.getArguments()[0].toString());
}
}
});
pulse.addObserver(new Observer() {
@Override
public void update(Observable o, Object arg) {
if(arg instanceof PulseData) {
final PulseData data = (PulseData)arg;
osCclient.sendPulse(actor, data.getHeartbeat(), data.getPulse(), data.getOxygen());
}
}
});
}
}