View Javadoc

1   /********************************************************************************
2    * InternetCafe is a software solution that helps the management of Cybercafes 
3    * according with the ITALIAN DECREE LAW ON ANTI-TERROR MEASURES, 27 JULY 2005.
4    * Copyright (C) 2006  Guido Angelo Ingenito
5   
6    * This program is free software; you can redistribute it and/or
7    * modify it under the terms of the GNU General Public License
8    * as published by the Free Software Foundation; either version 2
9    * of the License, or (at your option) any later version.
10  
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU General Public License for more details.
15   * 
16   * You should have received a copy of the GNU General Public License
17   * along with this program; if not, write to the Free Software
18   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19   *******************************************************************************/
20  
21  package base.jdbs.network;
22  
23  import java.util.Enumeration;
24  import java.util.Observable;
25  
26  import net.jxta.discovery.DiscoveryEvent;
27  import net.jxta.discovery.DiscoveryListener;
28  import net.jxta.discovery.DiscoveryService;
29  import net.jxta.protocol.DiscoveryResponseMsg;
30  import net.jxta.protocol.PeerAdvertisement;
31  import net.jxta.protocol.PeerGroupAdvertisement;
32  
33  import org.apache.log4j.Logger;
34  
35  import base.jdbs.network.util.JxtaUtil;
36  
37  /***
38   * @author skunk
39   *
40   */
41  public class GroupDiscoveryThread extends Observable implements Runnable, DiscoveryListener {
42  
43  	public static final String THREAD_NAME = "Group Discovery Thread";
44  	public static final int DISCOVERY_INTERVAL = 30*1000;
45  	
46  	private static final transient Logger logger = Logger.getLogger(GroupDiscoveryThread.class.getName());
47  
48  	private final DiscoveryService discoveryService;
49  	
50  	public GroupDiscoveryThread(DiscoveryService discoveryService){
51  		this.discoveryService = discoveryService;
52  		//Add ourself as discovery listener
53  		this.discoveryService.addDiscoveryListener(this);
54  	}
55  	
56  	public void run() {
57  		try { 
58  			while (true) { 
59  				JxtaUtil.groupsInLocalCache(this.discoveryService);
60  				
61  				logger.info(THREAD_NAME+": Sending a Group Discovery Message."); 
62  				//look for any peer group 
63  				this.discoveryService.getRemoteAdvertisements(null, DiscoveryService.GROUP, null, null, 10); 
64  				//wait a bit before sending next discovery message 
65  				try { 
66  					Thread.sleep(DISCOVERY_INTERVAL); 
67  				} catch(Exception ex) {
68  					logger.error(ex.getMessage());
69  				} 
70  			} 
71  		} 
72  		catch(Exception e) { 
73  			e.printStackTrace(); 
74  		} 
75  
76  	}
77  
78  	/* (non-Javadoc)
79  	 * @see net.jxta.discovery.DiscoveryListener#discoveryEvent(net.jxta.discovery.DiscoveryEvent)
80  	 */
81  	public void discoveryEvent(DiscoveryEvent discoveryEvent) {
82  		DiscoveryResponseMsg discoveryResponseMsg = discoveryEvent.getResponse(); 
83  		String name = "unknown"; 
84  		//Get the responding peer's advertisement 
85  		PeerAdvertisement peerAdvertisement = discoveryResponseMsg.getPeerAdvertisement(); 
86  		//some peers may not respond with their peerAdvertisement 
87  		if (peerAdvertisement != null) { 
88  			name = peerAdvertisement.getName(); 
89  		} 
90  		
91  		logger.info(THREAD_NAME+": Got a Discovery Response [" +  discoveryResponseMsg.getResponseCount()+ " elements] from peer : " + name); 
92  		
93  //		printout each discovered peer
94  		PeerGroupAdvertisement peerGroupArvertisement = null;
95  		Enumeration enumeration = discoveryResponseMsg.getAdvertisements();
96  		if (enumeration != null ) {
97  			while (enumeration.hasMoreElements()) {
98  				peerGroupArvertisement = (PeerGroupAdvertisement) enumeration.nextElement();
99  				logger.info(" Group NAME: " + peerGroupArvertisement.getName() +" ID: "+peerGroupArvertisement.getID().toString() );
100 				//NetworkManager.getInstance().addDiscoveredPeer(peerArvertisement);
101 			}
102 		}
103 	}
104 }