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(); } } }