001 /**
002 *
003 * Copyright 2004 Protique Ltd
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 *
017 **/
018
019 package org.activemq.transport.multicast;
020 import java.net.URI;
021 import java.net.URISyntaxException;
022
023 import javax.jms.JMSException;
024
025 import org.activemq.io.impl.DefaultWireFormat;
026 import org.activemq.message.ActiveMQTextMessage;
027 import org.activemq.message.Packet;
028 import org.activemq.message.PacketListener;
029 import org.activemq.util.IdGenerator;
030
031 import EDU.oswego.cs.dl.util.concurrent.SynchronizedBoolean;
032
033 /**
034 * An agent used to discover other instances of a service
035 *
036 * @version $Revision: 1.1.1.1 $
037 */
038 public class MulticastTester implements PacketListener {
039
040 private static final IdGenerator idGenerator = new IdGenerator();
041 public static final String DEFAULT_DISCOVERY_URI = "multicast://224.1.2.3:6066";
042
043 private SynchronizedBoolean started = new SynchronizedBoolean(false);
044 private MulticastTransportChannel channel;
045
046 private URI uri;
047 private String localId = idGenerator.generateId();
048
049 public static void main(String[] args) throws URISyntaxException, JMSException, InterruptedException {
050
051 MulticastTester tester = new MulticastTester();
052 tester.setUri(new URI(DEFAULT_DISCOVERY_URI));
053
054 if( args.length > 0 ) {
055 tester.setUri(new URI(args[0]));
056 }
057 if( args.length > 1 ) {
058 tester.setLocalId(args[1]);
059 }
060
061 tester.start();
062
063 ActiveMQTextMessage message = new ActiveMQTextMessage();
064 int counter = 0;
065 while( true ) {
066 message.setText("Message "+counter+" from "+tester.getLocalId());
067 tester.send(message);
068 counter++;
069 Thread.sleep(1000);
070 }
071
072 }
073
074 private void send(ActiveMQTextMessage message) throws JMSException {
075 channel.asyncSend(message);
076 }
077
078 public void start() throws JMSException {
079 if (started.commit(false, true)) {
080 System.out.println("Opening: "+uri);
081 channel = new MulticastTransportChannel(new DefaultWireFormat(), uri);
082 channel.setClientID(localId);
083 channel.setPacketListener(this);
084 channel.start();
085 }
086 }
087
088 public void stop() throws JMSException {
089 if (started.commit(true, false)) {
090 channel.stop();
091 }
092 }
093
094 public void consume(Packet packet) {
095 if( packet instanceof ActiveMQTextMessage ) {
096 try {
097 System.out.println("Received Text Packet: "+((ActiveMQTextMessage)packet).getText());
098 } catch (JMSException e) {
099 e.printStackTrace();
100 }
101 } else {
102 System.out.println("Received Unknown Packet: "+packet);
103 }
104 }
105 /**
106 * @return Returns the localId.
107 */
108 public String getLocalId() {
109 return localId;
110 }
111 /**
112 * @param localId The localId to set.
113 */
114 public void setLocalId(String localId) {
115 this.localId = localId;
116 }
117 /**
118 * @return Returns the uri.
119 */
120 public URI getUri() {
121 return uri;
122 }
123 /**
124 * @param uri The uri to set.
125 */
126 public void setUri(URI uri) {
127 this.uri = uri;
128 }
129
130 }