package org.yamcs.api;
import java.net.URISyntaxException;
import org.apache.activemq.artemis.api.core.ActiveMQException;
import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.api.core.client.ClientMessage;
import org.apache.activemq.artemis.api.core.client.MessageHandler;
import org.yamcs.api.YamcsApiException;
import org.yamcs.api.artemis.Protocol;
import org.yamcs.api.artemis.YamcsClient;
import org.yamcs.api.artemis.YamcsSession;
import org.yamcs.protobuf.Pvalue.ParameterValue;
import org.yamcs.protobuf.Pvalue.ParameterData;
import org.yamcs.protobuf.Yamcs.NamedObjectId;
import org.yamcs.protobuf.Yamcs.NamedObjectList;
import org.yamcs.protobuf.Yamcs.StringMessage;
import org.yamcs.utils.StringConverter;
import org.yamcs.utils.TimeEncoding;
public class RealtimeParameterTest {
final YamcsSession ysession;
final YamcsClient yclient;
final SimpleString rpcAddr;
final String namespace="MDB:OPS Name";
RealtimeParameterTest() throws YamcsApiException, URISyntaxException, ActiveMQException {
ysession=YamcsSession.newBuilder().setConnectionParams("yamcs://aces-test:5445").build();
yclient=ysession.newClientBuilder()
.setRpc(true)
.setDataConsumer(null, null).build();
rpcAddr=Protocol.getParameterRealtimeAddress("aces-test");
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
try {
yclient.close();
ysession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}));
}
void testSubscribeSome() throws Exception {
yclient.dataConsumer.setMessageHandler(new MessageHandler() {
@Override
public void onMessage(ClientMessage msg) {
decodeAndPrint(msg);
}
});
System.out.println("subscribing to aces_SHM_REG_SETH");
NamedObjectId noi=NamedObjectId.newBuilder().setName("aces_SHM_REG_SETH").setNamespace(namespace).build();
NamedObjectList nol=NamedObjectList.newBuilder().addList(noi).build();
yclient.executeRpc(rpcAddr, "subscribe", nol, null);
Thread.sleep(15000);
System.out.println("subscribing to aces_SHM_HK_AcqStatus");
noi=NamedObjectId.newBuilder().setName("aces_SHM_HK_AcqStatus").setNamespace(namespace).build();
nol=NamedObjectList.newBuilder().addList(noi).build();
yclient.executeRpc(rpcAddr, "subscribe", nol, null);
Thread.sleep(15000);
System.out.println("unsubscribing from aces_SHM_REG_SETH");
noi=NamedObjectId.newBuilder().setName("aces_SHM_REG_SETH").setNamespace(namespace).build();
nol=NamedObjectList.newBuilder().addList(noi).build();
yclient.executeRpc(rpcAddr, "unsubscribe", nol, null);
Thread.sleep(15000);
}
void testSubscribeAll() throws Exception {
StringMessage nsmsg=StringMessage.newBuilder().setMessage(namespace).build();
yclient.executeRpc(rpcAddr, "subscribeAll", nsmsg, null);
while(true) {
ClientMessage msg=yclient.dataConsumer.receive();
decodeAndPrint(msg);
}
}
static void decodeAndPrint(ClientMessage msg) {
try {
ParameterData pdata=(ParameterData) Protocol.decode(msg, ParameterData.newBuilder());
System.out.println("-------------received "+pdata.getParameterCount()+" parameters:");
for(int i=0;i<pdata.getParameterCount();i++) {
ParameterValue pv=pdata.getParameter(i);
System.out.println(String.format("%-25s %-30s %s", TimeEncoding.toString(pv.getAcquisitionTime()), pv.getId().getName(), StringConverter.toString(pv.getEngValue(),false)));
//System.out.println(pv);
}
System.out.println();
} catch(YamcsApiException e) {
System.out.println("cannot decode message: "+e);
}
}
public static void main(String[] args) throws Exception {
TimeEncoding.setUp();
RealtimeParameterTest rpt=new RealtimeParameterTest();
rpt.testSubscribeAll();
//rpt.testSubscribeSome();
}
}