import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.ArrayList;
import java.util.List;
import javax.swing.SwingWorker;
import multiplexer.jmx.client.ConnectException;
import multiplexer.jmx.client.JmxClient;
import multiplexer.jmx.client.SendingMethod;
import multiplexer.jmx.exceptions.NoPeerForTypeException;
import multiplexer.protocol.Protocol.MultiplexerMessage;
import org.apache.log4j.Logger;
import org.signalml.multiplexer.protocol.SvarogConstants;
import org.signalml.multiplexer.protocol.SvarogProtocol.Tag;
import org.signalml.multiplexer.protocol.SvarogProtocol.Variable;
import org.signalml.multiplexer.protocol.SvarogProtocol.VariableVector;
public class TagMock {
protected static final Logger logger = Logger.getLogger(TagMock.class);
protected JmxClient connection;
protected MockWorker worker;
protected List<Long> tagMilis = new ArrayList<Long>();
public class MockWorker extends SwingWorker<Void, Void> {
public MockWorker() {
super();
}
@Override
protected Void doInBackground() throws Exception {
double time = tagMilis.get(0).doubleValue() / 1000.0;
Thread.sleep(tagMilis.get(0).longValue());
for (int i=1; i<tagMilis.size(); i++) {
Long milis = tagMilis.get(i);
Tag.Builder tagBuilder = Tag.newBuilder();
tagBuilder.setStartTimestamp(time);
time += milis.doubleValue() / 1000.0;
tagBuilder.setEndTimestamp(time);
tagBuilder.setName("tag" + i);
tagBuilder.setChannels("1 2 3"); // TODO dodać losowanie liczby kanałów i kanałów z podanej listy
VariableVector.Builder variableVectorBuilder = VariableVector.newBuilder();
Variable.Builder variableBuilder = Variable.newBuilder();
variableBuilder.setKey("abc");
variableBuilder.setValue("qwerty");
variableVectorBuilder.addVariables(variableBuilder.build());
variableBuilder = Variable.newBuilder();
variableBuilder.setKey("def");
variableBuilder.setValue("zxcvbn");
variableVectorBuilder.addVariables(variableBuilder.build());
tagBuilder.setDesc(variableVectorBuilder.build());
Tag tag = tagBuilder.build();
MultiplexerMessage mm = connection.createMessage(tag.toByteString(), SvarogConstants.MessageTypes.TAG);
connection.send(mm, SendingMethod.THROUGH_ALL);
Thread.sleep(milis.longValue());
}
return null;
}
}
@Override
protected void finalize() throws Throwable {
connection.shutdown();
super.finalize();
}
/**
* @param args
* @throws ConnectException
* @throws NoPeerForTypeException
* @throws InterruptedException
* @throws IOException
*/
public static void main(String[] args) throws ConnectException, NoPeerForTypeException, InterruptedException {
TagMock mock = new TagMock();
for (String arg : args) {
mock.tagMilis.add(Long.parseLong(arg));
}
System.out.print("Connecting ... ");
mock.connection = new JmxClient(SvarogConstants.PeerTypes.TAGS_SENDER);
SocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 31889);
mock.connection.connect(socketAddress);
System.out.println("Connected!");
mock.worker = mock.new MockWorker();
mock.worker.execute();
}
}