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

📄 startjxta.java

📁 jxta实现的p2p聊天
💻 JAVA
字号:
/*
 * Student Name: Seyed Saeed Ghiassy
 * Student ID  : 05994390
 * Supervisor  : Dr.Fakas
 * Project Name: Peer-to-Peer File Sharing Application Using JXTA technology
 * Unit Name   : Final Year Project
 * Unit Code   : 63CP3261
 * DeadLine    : 21-April-2008
 * University  : Manchester Metropolitan University
 * E-mail      : seyed.ghiassy@student.mmu.ac.uk
 * Softwares   : JXTA Version 2.4.1, JDK Version 1.6.0_05, NetBeans IDE 5.5
 */
package myPackage;
//This class is for initializing Peer and launch it into Default JXTA network and use its
//Services to Create out own group.
import java.io.IOException;
import java.io.StringWriter;
import java.net.URL;
import java.util.Enumeration;
import javax.swing.JTextArea;
//importing JXTA Libraries
import net.jxta.credential.AuthenticationCredential;
import net.jxta.credential.Credential;
import net.jxta.discovery.DiscoveryService;
import net.jxta.document.MimeMediaType;
import net.jxta.document.StructuredDocument;
import net.jxta.document.StructuredTextDocument;
import net.jxta.exception.PeerGroupException;
import net.jxta.id.IDFactory;
import net.jxta.membership.Authenticator;
import net.jxta.membership.MembershipService;
import net.jxta.peergroup.PeerGroup;
import net.jxta.peergroup.PeerGroupFactory;
import net.jxta.peergroup.PeerGroupID;
import net.jxta.protocol.ModuleImplAdvertisement;
import net.jxta.protocol.PeerGroupAdvertisement;

public class StartJXTA 
{   //Class Variables
    public JTextArea log;
    private final static int TIMEOUT = 5*1000;
    private PeerGroup netPeerGroup = null,
              SaEeDGroup   =null;
    DiscoveryService myDiscoveryService =null,
                     SaEeDGroupDiscoveryService =null;
    PeerGroupAdvertisement SaEeDAdv =null;
    //unique id for group, it is taken from JXTA services
    private final String stringID = "jxta:uuid-4E0742B0E54F4D0ABAC6809BB82A311E02";
    
    /** Creates a new instance of StartJXTA */
    public StartJXTA(JTextArea txt) 
    {
        this.log = txt;
        launchJXTA();
        getServices();
        searchForGroup();
    }
    private void launchJXTA()
    {
        log.append("[+]Launching into JXTA Network...\n");
        try{
            netPeerGroup = PeerGroupFactory.newNetPeerGroup();            
        }catch(PeerGroupException e){
            System.out.println("[-]Fatal Error:" + e.getMessage());
            e.printStackTrace();
            System.exit(-1);
        }
        
    }
    private void getServices()
    {
        //Obtaining JXTA Services from JXTA Global group
        log.append("[+]Obtaining Peer Group Services.\n");
        myDiscoveryService = netPeerGroup.getDiscoveryService();
    }
    private void searchForGroup() //This method will Search for Group
    {                            //If group found it will be join into it otherwise it
        Enumeration adv=null;    //will create the group itself.   
        int count =0;
        log.append("[+]Searching for SaEeDGroup Advertisements.\n");
        while(count < 5){
            try {
                log.append("[+]Try Number: " + count +"\n");
                //Searching for Group Advertisements , first from local cach if not
                //found then search from remote peers
                adv = myDiscoveryService.getLocalAdvertisements(DiscoveryService.GROUP,"Name","SaEeDGroup");
                if((adv != null) && adv.hasMoreElements()){
                    log.append("[+]SaEeDGroup found in Local advertisement.\n");
                    SaEeDAdv = (PeerGroupAdvertisement)adv.nextElement();
                    SaEeDGroup = netPeerGroup.newGroup(SaEeDAdv);
                    joinToGroup(SaEeDGroup);
                    break;
                }else{
                    log.append("[-]No Group Found in Local advertisement.\n[+]Starting Remote Search...\n");
                    myDiscoveryService.getRemoteAdvertisements(null,DiscoveryService.GROUP,"Name","SaEeDGroup",1);
                }
                Thread.sleep(TIMEOUT);
                //if group not found after couple of tries it will create the group itself
                if((count == 4) && (adv == null || !adv.hasMoreElements())){
                    log.append("[-]No Group Found!!! - Creating Group\n");
                    SaEeDGroup = createGroup();
                    joinToGroup(SaEeDGroup);
                    break;
                }
                
            } catch (IOException ex) {
                ex.printStackTrace();
            }catch(PeerGroupException e){
            System.out.println("[-]Fatal Error:" + e.getMessage());
            e.printStackTrace();
            System.exit(-1);
            }catch(InterruptedException e){
               System.out.println("[-]Fatal Error:" + e.getMessage());
               e.printStackTrace(); 
            }
            count++;
        }
    }
    private PeerGroup createGroup() //This method will Create SaEeD group :-)
    {
        log.append("[+]Creating New Group...\n");
        PeerGroup myNewGroup = null;
        try{
            //specifying advertisement for group and configure group, then publish it
            //Advertisement for remote peers
            ModuleImplAdvertisement myMIA = netPeerGroup.getAllPurposePeerGroupImplAdvertisement();
            myNewGroup = netPeerGroup.newGroup(getGID(),
                                               myMIA,
                                               "SaEeDGroup",
                                               "SaEeD P2P File Sharing Application");
            SaEeDAdv = myNewGroup.getPeerGroupAdvertisement();
            //publishing new group advertisements
            myDiscoveryService.publish(SaEeDAdv);
            myDiscoveryService.remotePublish(SaEeDAdv);
            log.append("[+]New Peer Group Successfully created :-)\n");
            log.append("[+]Publishing new Group Advertisements.\n");
            log.append("[+]Group Information:\n");
            log.append("[===========================]\n");
            log.append("[+]Group Name: " + SaEeDAdv.getName()+"\n");
            log.append("[+]Group ID:" + SaEeDAdv.getPeerGroupID().toString()+"\n");
            log.append("[+]Group Description: " + SaEeDAdv.getDescription()+"\n");
            log.append("[+]Group Module ID: " + SaEeDAdv.getModuleSpecID().toString()+"\n");
            log.append("[+]Advertisement Type: " + SaEeDAdv.getAdvertisementType()+"\n");
            log.append("[===========================]\n");
        }catch(Exception e){
            System.out.println("[*]Fatal Error:" + e.getMessage());
            e.printStackTrace();
            System.exit(-1);
        }
        return myNewGroup;
    }
    //This method will return peerGroupID from given String ID
    private PeerGroupID getGID() throws Exception{
        return (PeerGroupID) IDFactory.fromURL(new URL("urn","",stringID));
    }
    private void joinToGroup(PeerGroup group) //This method will join to either found group or created group
    {
        StructuredDocument creds = null;
        log.append("[===========================]\n");
        log.append("[+]Joining into SaEeDGroup..\n");
        
        try{
            //Athenticate and join to group
        AuthenticationCredential authCred = new AuthenticationCredential(group,null,creds);
        MembershipService membership = group.getMembershipService();
        Authenticator auth = membership.apply(authCred);
            if(auth.isReadyForJoin()){
                Credential myCred = membership.join(auth);
                System.out.println("[===== Group Details =====]");
                StructuredTextDocument doc = (StructuredTextDocument)myCred.getDocument(new MimeMediaType("text/plain"));
                StringWriter out = new StringWriter();
                doc.sendToWriter(out);
                
                System.out.println(out.toString());
                log.append("[+]Peer Name : " + group.getPeerName() + " is now online :-)\n");
                log.append("[+]Obtaining SaEeDGroup Services.\n");
                //Publishing Peer Advertisements.
                SaEeDGroupDiscoveryService = group.getDiscoveryService();
                log.append("[+]Publishing Peer Advertisement.\n");
                SaEeDGroupDiscoveryService.publish(group.getPeerAdvertisement());
                SaEeDGroupDiscoveryService.remotePublish(group.getPeerAdvertisement());
                
                log.append("[===========================]\n");
            }
            else{
                System.out.println("[!!]Fatal Error: Cannot Join to The Group!");
                System.exit(-1);
            }            
        }catch(Exception e){
                System.out.println("[!]Fatal Error: " + e.getMessage());
                e.printStackTrace();
                System.exit(-1);
            }
    }
    
    public PeerGroup getSaEeDGroup() //This accessor will return group
    {
     return SaEeDGroup;   
    }
    public PeerGroupAdvertisement getSaEeDAdv(){//This accessor will return Advertisements
        return SaEeDAdv;
    }
    
}

⌨️ 快捷键说明

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