View Javadoc

1   /*
2    * Copyright (c) 2001 Sun Microsystems, Inc.  All rights
3    * reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    * 1. Redistributions of source code must retain the above copyright
10   *    notice, this list of conditions and the following disclaimer.
11   *
12   * 2. Redistributions in binary form must reproduce the above copyright
13   *    notice, this list of conditions and the following disclaimer in
14   *    the documentation and/or other materials provided with the
15   *    distribution.
16   *
17   * 3. The end-user documentation included with the redistribution,
18   *    if any, must include the following acknowledgment:
19   *       "This product includes software developed by the
20   *       Sun Microsystems, Inc. for Project JXTA."
21   *    Alternately, this acknowledgment may appear in the software itself,
22   *    if and wherever such third-party acknowledgments normally appear.
23   *
24   * 4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA" must
25   *    not be used to endorse or promote products derived from this
26   *    software without prior written permission. For written
27   *    permission, please contact Project JXTA at http://www.jxta.org.
28   *
29   * 5. Products derived from this software may not be called "JXTA",
30   *    nor may "JXTA" appear in their name, without prior written
31   *    permission of Sun.
32   *
33   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
34   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
35   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
36   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
37   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
38   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
39   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
40   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
41   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
42   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
43   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
44   * SUCH DAMAGE.
45   * ====================================================================
46   *
47   * This software consists of voluntary contributions made by many
48   * individuals on behalf of Project JXTA.  For more
49   * information on Project JXTA, please see
50   * <http://www.jxta.org/>.
51   *
52   * This license is based on the BSD license adopted by the Apache Foundation.
53   *
54   */
55  
56  package base;
57  
58  import java.util.Enumeration;
59  
60  import net.jxta.discovery.DiscoveryEvent;
61  import net.jxta.discovery.DiscoveryListener;
62  import net.jxta.discovery.DiscoveryService;
63  import net.jxta.exception.PeerGroupException;
64  import net.jxta.peergroup.PeerGroup;
65  import net.jxta.peergroup.PeerGroupFactory;
66  import net.jxta.protocol.DiscoveryResponseMsg;
67  import net.jxta.protocol.PeerAdvertisement;
68  
69  import org.apache.log4j.Logger;
70  import org.apache.log4j.xml.DOMConfigurator;
71  
72  public class DiscoveryDemo implements Runnable, DiscoveryListener {
73  
74  	private static final transient Logger logger = Logger.getLogger(DiscoveryDemo.class.getName());
75  
76      static PeerGroup netPeerGroup  = null;
77      private DiscoveryService discovery;
78  
79     //start the JXTA platform
80      private void startJxta() {
81          try {
82              netPeerGroup = PeerGroupFactory.newNetPeerGroup();
83        
84          } catch ( PeerGroupException e) {
85              // could not instantiate the group, print the stack and exit
86          	    logger.error("fatal error : group creation failure");
87              e.printStackTrace();
88              System.exit(1);
89          }
90  
91          // Get the discovery service from our peer group
92          discovery = netPeerGroup.getDiscoveryService();
93      }
94  
95      /***
96       * This thread loops forever discovering peers
97       * every minute, and displaying the results.
98       */
99  
100     public void run() {
101         try {
102             // Add ourselves as a DiscoveryListener for DiscoveryResponse events
103             discovery.addDiscoveryListener(this);
104             while (true) {
105                 logger.info("Sending a Discovery Message");
106                 // look for any peer
107                 discovery.getRemoteAdvertisements(null, DiscoveryService.PEER,
108                                                   null, null, 10);
109                 // wait a bit before sending next discovery message
110                 try {
111                     Thread.sleep(30 * 1000);
112                 } catch(Exception e) {}
113 
114             } //end while
115         } catch(Exception e) {
116             e.printStackTrace();
117         }
118     }
119 
120     /***
121      * by implementing DiscoveryListener we must define this method
122      * to deal to discovery responses
123      */
124 
125     public void discoveryEvent(DiscoveryEvent ev) {
126 
127         DiscoveryResponseMsg res = ev.getResponse();
128         String name = "unknown";
129 
130         // Get the responding peer's advertisement
131         PeerAdvertisement peerAdv = res.getPeerAdvertisement();
132         logger.info("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+peerAdv);
133         
134         // some peers may not respond with their peerAdv
135         if (peerAdv != null) { 
136             name = peerAdv.getName();
137         }
138 
139         logger.info("Got a Discovery Response [" +
140                            res.getResponseCount() + " elements] from peer: " +
141                            name);
142         //printout each discovered peer
143         PeerAdvertisement adv = null;
144         Enumeration en = res.getAdvertisements();
145         if (en != null ) {
146             while (en.hasMoreElements()) {
147                 adv = (PeerAdvertisement) en.nextElement();
148                 logger.info(" Peer name = " + adv.getName());
149             }
150         }
151     }
152 
153     static public void main(String args[]) {
154 
155 		//This call enables the log4j logs for JDBS.
156 		DOMConfigurator.configure("log4jConfiguration.xml");
157         DiscoveryDemo myapp  = new DiscoveryDemo();
158         myapp.startJxta();
159         myapp.run();
160     }
161 }