package org.hpsearch.demo.CrisisGridServices;
import java.net.InetAddress;
import java.util.Enumeration;
import java.util.Properties;
import javax.jms.BytesMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber;
import cgl.narada.jms.NBJmsInitializer;
/**
* Sample client that outputs he relevant parts of messages on the command line
*
* Created: May 13, 2004
* Modified from RunoffMapsVisualClient.java written by Sunghoon Ko(suko@indiana.edu)
*
* @author Harshawardhan Gadgil (hgadgil@grids.ucs.indiana.edu)
*/
public class VisualizationClient implements MessageListener {
public VisualizationClient() {
}
public static void main(String[] args) {
VisualizationClient vc = new VisualizationClient();
try {
Properties props = new Properties();
props.put("hostname", InetAddress.getLocalHost().getHostName());
props.put("portnum", "3045");
NBJmsInitializer ini = new NBJmsInitializer(props, "niotcp", 9);
TopicConnectionFactory conFactory = (TopicConnectionFactory) ini.lookup();
vc.initializeSession(conFactory, "userName");
} catch (Exception e) {
e.printStackTrace();
}
}
public void initializeSession(TopicConnectionFactory conFactory, String username)
throws Exception {
// Create a JMS connection
TopicConnection connection = conFactory.createTopicConnection("guest333", "password");
// Create a JMS session object
TopicSession subSession = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
// Lookup a JMS topic
Topic visualizationTopic = subSession.createTopic("Visualization");
TopicSubscriber subscriber = subSession.createSubscriber(visualizationTopic);
subscriber.setMessageListener(this);
Topic rainfallTopic = subSession.createTopic("RainFall");
TopicSubscriber rainFallSubscriber = subSession.createSubscriber(rainfallTopic);
rainFallSubscriber.setMessageListener(this);
Topic mapTopic = subSession.createTopic("MapServer");
TopicSubscriber mapSubscriber = subSession.createSubscriber(mapTopic);
mapSubscriber.setMessageListener(this);
// Start the JMS connection; allows messages to be delivered
connection.start();
}
////////////////////////////////////////////////////////
/* Receive message from topic subscriber */
public byte[] bytesMsg;
private String outputFile;
private String imageName;
public void onMessage(Message message) {
try {
Enumeration propertyNames = message.getPropertyNames();
String propertyName = (String) propertyNames.nextElement();
String value = message.getStringProperty(propertyName);
System.out.println("RunoffMaps4VisualComm] PropertyName = " + propertyName + ",value="
+ value);
if (message.getJMSType().equals("BytesMessage")) {
if (propertyName.equals("ImageFile")) {
BytesMessage byteMessage = (BytesMessage) message;
int length = byteMessage.readInt();
byte[] buffer = new byte[length];
byteMessage.readBytes(buffer);
System.out.println("length= " + length);
}
} else if (message.getJMSType().equals("TextMessage")) {
TextMessage textMessage = (TextMessage) message;
System.out.println("PropertyName =" + propertyName + ",value=" + value + ", text="
+ textMessage.getText());
if (propertyName.equals("HostName")) {
System.out.println("value = " + value);
if (value.equals("RunoffModel")) {
System.out.println("RunoffModel HostName = " + textMessage.getText());
}
} else if (propertyName.equals("FileStatus")) {
System.out.println("File Status value = " + value);
if (value.equals("ImageFileEnd")) {
System.out.println("ImageFileEnd");
} else if (value.equals("ImageFileName")) {
String text = textMessage.getText();
imageName = "web_" + text;
System.out.println("ImageFileName = " + text);
outputFile = System.getProperty("user.dir") + "/webapps/CrisisGrid/"
+ imageName;
System.out.println("Writing to o/p: " + outputFile);
} else if (value.equals("AllImageFilesSendingEnd")) {
System.out.println("AllImageFilesSendingEnd");
}
} else if (propertyName.equals("RainfallComm")) {
String text = textMessage.getText();
if (text.equals("GotTerrainData")) {
System.out.println("_parent.isTerrainDataReady = true");
}
} else if (propertyName.equals("RunoffModelMain")) {
if (value.equals("DoneCompute")) {
System.out.println("_parent.isComputeDone = true");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}