⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 peerinfoserviceimpl.java

📁 jxta_src_2.41b jxta 2.41b 最新版源码 from www.jxta.org
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* *  Copyright (c) 2001 Sun Microsystems, Inc.  All rights *  reserved. * *  Redistribution and use in source and binary forms, with or without *  modification, are permitted provided that the following conditions *  are met: * *  1. Redistributions of source code must retain the above copyright *  notice, this list of conditions and the following disclaimer. * *  2. Redistributions in binary form must reproduce the above copyright *  notice, this list of conditions and the following disclaimer in *  the documentation and/or other materials provided with the *  distribution. * *  3. The end-user documentation included with the redistribution, *  if any, must include the following acknowledgment: *  "This product includes software developed by the *  Sun Microsystems, Inc. for Project JXTA." *  Alternately, this acknowledgment may appear in the software itself, *  if and wherever such third-party acknowledgments normally appear. * *  4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA" must *  not be used to endorse or promote products derived from this *  software without prior written permission. For written *  permission, please contact Project JXTA at http://www.jxta.org. * *  5. Products derived from this software may not be called "JXTA", *  nor may "JXTA" appear in their name, without prior written *  permission of Sun. * *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *  DISCLAIMED.  IN NO EVENT SHALL SUN MICROSYSTEMS OR *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF *  SUCH DAMAGE. *  ==================================================================== * *  This software consists of voluntary contributions made by many *  individuals on behalf of Project JXTA.  For more *  information on Project JXTA, please see *  <http://www.jxta.org/>. * *  This license is based on the BSD license adopted by the Apache Foundation. * *  $Id: PeerInfoServiceImpl.java,v 1.41 2004/10/09 23:42:01 bondolo Exp $ */package net.jxta.impl.peer;import java.util.Enumeration;import java.util.Iterator;import java.util.Vector;import java.util.Hashtable;import java.util.Random;import java.io.IOException;import java.io.ByteArrayInputStream;import java.io.FileInputStream;import java.io.InputStream;import java.io.StringReader;import java.io.StringWriter;import java.net.URI;import org.apache.log4j.Logger;import org.apache.log4j.Level;import net.jxta.service.Service;import net.jxta.endpoint.EndpointService;import net.jxta.resolver.ResolverService;import net.jxta.resolver.QueryHandler;import net.jxta.document.Advertisement;import net.jxta.document.AdvertisementFactory;import net.jxta.document.Document;import net.jxta.document.StructuredDocument;import net.jxta.document.StructuredDocumentFactory;import net.jxta.document.XMLDocument;import net.jxta.document.MimeMediaType;import net.jxta.document.Element;import net.jxta.id.ID;import net.jxta.id.IDFactory;import net.jxta.protocol.ResolverQueryMsg;import net.jxta.protocol.ResolverResponseMsg;import net.jxta.protocol.PeerGroupAdvertisement;import net.jxta.protocol.PeerAdvertisement;import net.jxta.protocol.ModuleImplAdvertisement;import net.jxta.protocol.PeerInfoQueryMessage;import net.jxta.protocol.PeerInfoResponseMessage;import net.jxta.peergroup.PeerGroup;import net.jxta.exception.PeerGroupException;import net.jxta.exception.ServiceNotFoundException;import net.jxta.peer.PeerInfoService;import net.jxta.peer.PeerInfoListener;import net.jxta.peer.PeerInfoEvent;import net.jxta.peergroup.PeerGroupID;import net.jxta.credential.Credential;import net.jxta.credential.AuthenticationCredential;import net.jxta.membership.Authenticator;import net.jxta.membership.MembershipService;import net.jxta.impl.cm.Cm;import net.jxta.impl.protocol.ResolverQuery;import net.jxta.impl.protocol.ResolverResponse;import net.jxta.impl.protocol.PeerInfoQueryMsg;import net.jxta.impl.protocol.PeerInfoResponseMsg;import net.jxta.impl.peer.PeerInfoServiceInterface;import net.jxta.impl.util.EndpointServiceStatsFilter;import net.jxta.exception.JxtaException;import net.jxta.exception.PeerGroupException;import net.jxta.meter.*;import net.jxta.impl.meter.*;import net.jxta.peer.*;import net.jxta.util.*;import net.jxta.platform.*;import net.jxta.util.documentSerializable.*;/** *  Peer Info provides a mechanism to obtain  information about peers. * */public class PeerInfoServiceImpl implements PeerInfoService {	private final static Logger LOG =	    Logger.getLogger(PeerInfoServiceImpl.class.getName());	/**	 *  Time in milli seconds since midnight, January 1, 1970 UTC and when this	 *  peer was started.	 */	private long startTime = 0;	private ResolverService resolver = null;	private PeerGroup pg = null;	private EndpointService endpoint = null;	private PeerID localPeerId = null;	private ModuleImplAdvertisement implAdvertisement = null;	private String resolverHandlerName = null;	private MembershipService membership = null;	private Credential credential = null;	private StructuredDocument credentialDoc = null;	private MonitorManager monitorManager;	private Hashtable peerInfoHandlers = new Hashtable();	private PipQueryHandler pipQueryHandler = new PipQueryHandler();	private RemoteMonitorPeerInfoHandler remoteMonitorPeerInfoHandler;	private PeerInfoMessenger resolverServicePeerInfoMessenger = new ResolverServicePeerInfoMessenger();	private int nextQueryId = 1000;	private static Random rand = new Random();	// This static package public hashtable of registered PeerInfoServiceImpls	// allows us to do Peergroup Monitoring via an IP Bridge to the PIP	// See the documentation on the JXTA Monitor	static Hashtable peerInfoServices = new Hashtable(); 		int getNextQueryId() {		int id = 0;		synchronized(rand) {			id = rand.nextInt(Integer.MAX_VALUE);		}		return id; 	}		/**	 *  Supply arguments and starts this service if it hadn't started by	 *  itself. Currently this service starts by itself and does not expect	 *  arguments.	 *	 *@param  arg  A table of strings arguments.	 *@return      int status indication.	 */	public int startApp(String[] arg) {		/* Fix-Me: When MonitorService is a true service, this should be moved here from init()        try {        	if (MeterBuildSettings.METERING) 				monitorManager = MonitorManager.registerMonitorManager(pg);		// Fix-Me: This will become a service lookup when MonitorService is a real service        } catch (JxtaException e) {            return -1;		// Fix-Me: This is related to the initialization sequence work on the dev list on load order        }        */		remoteMonitorPeerInfoHandler = new RemoteMonitorPeerInfoHandler(pg, this);		peerInfoHandlers.put(RemoteMonitorPeerInfoHandler.MONITOR_HANDLER_NAME, remoteMonitorPeerInfoHandler);				resolver = pg.getResolverService();		resolver.registerHandler(resolverHandlerName, pipQueryHandler);		peerInfoServices.put(pg, this);		return 0;	}	/**	 *  Ask this service to stop. This request is currently ignored.	 */	public void stopApp() {				peerInfoServices.remove(pg);                peerInfoHandlers.remove(RemoteMonitorPeerInfoHandler.MONITOR_HANDLER_NAME);                remoteMonitorPeerInfoHandler.stop();		resolver.unregisterHandler(resolverHandlerName);                if (MeterBuildSettings.METERING) {			MonitorManager.unregisterMonitorManager(pg);                }		pg = null;	}	PeerInfoHandler getPeerInfoHandler(String name) { 		return (PeerInfoHandler) peerInfoHandlers.get(name);	}	/**	 *  Service objects are not manipulated directly to protect usage of the	 *  service. A Service interface is returned to access the service	 *  methods.	 *	 *@return    Service public interface of the service	 */	public Service getInterface() {		return new PeerInfoServiceInterface(this);	}	/**	 *  Returns the advertisement for that service.	 *	 *@return    Advertisement the advertisement.	 */	public Advertisement getImplAdvertisement() {		return implAdvertisement;	}	/**	 *  init is called by PeerGroup to init the Service	 *	 *@param  group	 *@param  assignedID	 *@param  impl	 *@throws  PeerGroupException  throw any exception thrown during	 *      obtaining Service	 */	public void init(PeerGroup group, ID assignedID, Advertisement impl)	throws PeerGroupException {		pg = group;				endpoint = pg.getEndpointService();		implAdvertisement = (ModuleImplAdvertisement) impl;		localPeerId = pg.getPeerID();		resolverHandlerName = assignedID.toString();		// Fix-Me: When MonitorManager is a true Service, this should be moved to startApp()        try {        	if (MeterBuildSettings.METERING) 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -