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

📄 jxtaapp.java

📁 Java p2p程序设计2002年版
💻 JAVA
字号:
/*
 * JxtaApp.java
 *
 * Created on October 3, 2001, 12:41 AM
 */

package com.sams.jxta;

/*
 * 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: JxtaApp.java,v 1.1 2002/04/03 06:40:47 turbogeek Exp $
 */
import com.sams.jxta.updateCMS.UpdateCMS;
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.util.Enumeration;
import java.lang.reflect.InvocationTargetException;


import net.jxta.peergroup.PeerGroup;
import net.jxta.peergroup.PeerGroupFactory;
import net.jxta.exception.PeerGroupException;
import net.jxta.document.Advertisement;
import net.jxta.document.AdvertisementFactory;
import net.jxta.document.MimeMediaType;
import net.jxta.protocol.DiscoveryResponseMsg;
import net.jxta.protocol.PeerGroupAdvertisement;

import net.jxta.impl.peergroup.Platform;
import net.jxta.impl.peergroup.GenericPeerGroup;
import net.jxta.document.Advertisement;
import net.jxta.impl.discovery.*;
import net.jxta.discovery.*;

/**
 *  This is a quick and simple example to primarly illustrate how to start project jxta
 *  from an application, and how to create a DiscoveryListener interface
 *  This is meant as an on going effort, if you can add to the
 *  example to help others understand, and integrate project jxta,
 *  feel free to do so, please refer to the "todo" section in README .
 */

public class JxtaApp implements Runnable{
    
    
    // classInit supplies these
    static PeerGroup platformGroup = null;
    static PeerGroup netPeerGroup  = null;
    static PeerGroupAdvertisement groupAdvertisement = null;
    
    private DiscoveryService discovery;
    private int myqueryid;
    PeerGroupAdvertisement pgadv;
    
    
    
    public  JxtaApp() {
        
    }
    
    private void startJxta() {
        
        try {
            // create, and Start the default jxta NetPeerGroup
            netPeerGroup = PeerGroupFactory.newNetPeerGroup();
        } catch (PeerGroupException e) {
            // could not instanciate the group, print the stack and exit
            System.out.println("fatal error : group creation failure");
            e.printStackTrace();
            System.exit(1);
        }
        
        // this is how to obtain the group advertisement
        groupAdvertisement = netPeerGroup.getPeerGroupAdvertisement();
    }
    // Start the application
    public void startApplication(String args[]){
        try{
            UpdateCMS updateCMS = new UpdateCMS();
            updateCMS.init(netPeerGroup,null,groupAdvertisement);
            updateCMS.startApp(null);
        }catch(PeerGroupException pge){
            System.out.println("Error starting UpdateCMS");
            pge.printStackTrace();
            System.exit(-1);
        }
        
    }
    
    /**
     * This thread basically loops for ever discovering peers
     * every minute, and displaying the results.
     */
    
    public void run() {
        try {
            // Add ourselves as a DiscoveryListener for DiscoveryResponse events
            discovery.addDiscoveryListener(new CMSDiscoveryListener());
            myqueryid = discovery.getRemoteAdvertisements(null,
            DiscoveryService.PEER,
            null,null, 1);
            
            while (true) {
                // wait a bit before sending a discovery message
                try {
                    Thread.sleep(10 * 1000);
                } catch(Exception e) {
                }
                System.out.println("Sending a Discovery Message");
                // look for any peer
                myqueryid = discovery.getRemoteAdvertisements(null,
                DiscoveryService.PEER,
                null,
                null, 5);
                
                
            }
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    
    /**
     * by implementing DiscoveryListener we must define this method
     * to deal to discovery responses
     */
    
    public void event(DiscoveryEvent ev) {
        
        DiscoveryResponseMsg res = ev.getResponse();
        
        // let's get the responding peer's advertisement
        String aRes = res.getPeerAdv();
        try {
            InputStream is = new ByteArrayInputStream( (aRes).getBytes() );
            
            pgadv = (PeerGroupAdvertisement)AdvertisementFactory.newAdvertisement(new MimeMediaType( "text/xml" ), is);
            System.out.println(" [  Got a Discovery Response ["+
            res.getResponseCount()+ " elements]  ");
            
        } catch (java.io.IOException ioe) {
            System.out.println("error parsing remote peer's advertisement");
            ioe.printStackTrace();
            return;
        }
        // now out the goodies
        Enumeration enum = res.getResponses();
        
        String str=null;
        Advertisement adv=null;
        
        while (enum.hasMoreElements()) {
            
            try {
                str = (String) enum.nextElement();
                // print out the response
                // System.out.println(str);
                
                // the following illustrates how to create
                // the advertisement object from a response
                adv =(Advertisement)
                AdvertisementFactory.newAdvertisement(new MimeMediaType("text/xml"), new ByteArrayInputStream(str.getBytes()));
            } catch (java.io.IOException e) {
                // got a bad response. continue to the next response
                System.out.println("error parsing response element");
                e.printStackTrace();
                continue;
            }
            
        }
        
    }
    
    
    static public void main(String args[]) {
        
        // Initialize
        JxtaApp myapp  = new JxtaApp();
        
        // Start JXTA
        myapp.startJxta();
        
        // Start the app (above for now...)
        myapp.startApplication(args);
        
        
    }
    
    class CMSDiscoveryListener implements DiscoveryListener {
        public void discoveryEvent(DiscoveryEvent e) {
            DiscoveryResponseMsg msg = e.getResponse();
            
            System.out.println("QueryValue:'"+msg.getQueryValue()+"'");
            
            int advCount = msg.getResponseCount();
            Enumeration enum = msg.getResponses();
            for ( ; enum.hasMoreElements();) {
                Object obj = enum.nextElement();
                System.out.println("Type:"+obj.getClass().getName());
            }
        }
    }
}

⌨️ 快捷键说明

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