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

📄 network.java

📁 一个基于NetBeans平台开发的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**
 * @(#)RiverCrescent.java
 *
 * JFC Sample application
 *
 * @author Sinpool
 * @version 1.00 05/02/22
 */

package com.sinpool.rivercrescent; 

import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;

import net.jxta.peergroup.*;
import net.jxta.exception.*;
import net.jxta.document.*;
import net.jxta.discovery.*;
import net.jxta.id.*;
import net.jxta.pipe.*;
import net.jxta.protocol.*;
import net.jxta.endpoint.*;

import com.sinpool.rivercrescent.Listener.*;
import com.sinpool.rivercrescent.BufferZone.JoinedPeerGroups;
import com.sinpool.rivercrescent.myutil.MyUtil;

public class NetWork{
    private PeerGroup netpg = null;      // The NetPeerGroup
    private PeerGroup riverCrescentNet = null;   // The RiverCrescentNet Peergroup
    
	//RiverCrescentNet组的服务
    private DiscoveryService disco = null;  // 发现服务
    private PipeService pipes = null;       // 管道服务
    private PipeAdvertisement myAdv = null; // 管道通告
    private InputPipe pipeIn = null;        // 用于监听的输入管道
    
    private int timeout = 3000;          // 发现请求等待的延时

    
    //用于创建一个独一无二的组
    private static String groupURL = "jxta:uuid-B878EEF13B9C4D62B47A84D96890326402"; 
    
    private Vector tableList = new Vector();
    private JoinedPeerGroups joinedPeerGroups = new JoinedPeerGroups(5);
	
    private JLabel statusLabel;
    private JList searchList;
    
    public NetWork(JLabel statusLabel){
        this.statusLabel = statusLabel;
    }
    
	/**初始化一个NetWork对象,<br>
	 *为了开始工作做好准备,<br>
	 *没有任何参数,<br>
	 *初始化后,客户端已经进入了:<br>
	 *RiverCrescentNet组<br>
	 *等待下一步工作,<br>
	 *一般是"获得现有的共享文件列表"。<br>
	 */
	public void init(){
        try {
            //发现并加入默认的组(NetPeerGroup)
            netpg = PeerGroupFactory.newNetPeerGroup();
        } catch (PeerGroupException e) {
            //不能初始化,不能继续时
            statusLabel.setText("状态:Fatal error : creating the NetPeerGroup");
            System.exit(1);
        }

        // 发现(创建)并加入 RiverCrescentNet peergroup
        try {
            joinRiverCrescentNet();
        } catch (Exception e) {
            statusLabel.setText("不能加入或创建 RiverCrescentNet 组");
            System.exit(1);
        }
	}
	
    private void joinRiverCrescentNet() throws Exception {

        int count = 3;   // 尝试发现组的次数
        statusLabel.setText("状态:正在尝试发现 RiverCrescentNet PeerGroup");

        // 获得NetPeergroup组的发现服务
        DiscoveryService hdisco = netpg.getDiscoveryService();

        Enumeration ae = null;   // 保存发现的PeerGroups

        while (count-- > 0) {
            try {
         		//首先在本地缓存搜索组通告
                ae = hdisco.getLocalAdvertisements(DiscoveryService.GROUP,
                                          "Name", "RiverCrescentNet");

                // 如果发现了RiverCrescentNet组通告,就停止搜索
                if ((ae != null) && ae.hasMoreElements())
                    break;

                // 如果班本地没有此通告,向网络发送发现请求
                hdisco.getRemoteAdvertisements(null,
                       DiscoveryService.GROUP, "Name", "RiverCrescentNet", 1, null);

                //等待其他Peer返回响应
                try {
                    Thread.sleep(timeout);
                } catch (InterruptedException ie) {}
            } catch (IOException e){
                // 没有发现是的异常,跳过此处,执行下面的内容
            }
        }
		
	PeerGroupAdvertisement riverCrescentNetAdv = null;

        //根据组通告获得与否,
        //来加入组
        //或新建一个组

        if (ae == null || !ae.hasMoreElements()) {
            statusLabel.setText(
                 "没有发现 RiverCrescentNet peergroup; 马上创建一个……");
            try {
                // 用"一般性的模块实现通告"创建一个新组
                ModuleImplAdvertisement implAdv =
                    netpg.getAllPurposePeerGroupImplAdvertisement();

                riverCrescentNet = netpg.newGroup(
           		                     mkGroupID(),      	// 生成新的组ID
            	                    implAdv,          	// 实现通告
                    	            "RiverCrescentNet",	// 组名称
             	                    "一个文件共享组");	// 组描述

                // 获得PeerGroup组通告
                riverCrescentNetAdv = netpg.getPeerGroupAdvertisement();

            } catch (Exception e) {
                statusLabel.setText("状态:创建 RiverCrescentNet Peergroup 时失败!");
                throw e;
            }
        } else {
            //如果前面在本地发现了该组,就加入它

            try {
                riverCrescentNetAdv = (PeerGroupAdvertisement) ae.nextElement();
                riverCrescentNet = netpg.newGroup(riverCrescentNetAdv);
                statusLabel.setText(
                    "Found the RiverCrescentNet Peergroup advertisement");
            } catch (Exception e) {
                statusLabel.setText("状态:通过存在的通告创建 RiverCrescentNet PeerGroup 失败!");
                throw e;
            }
        }

        try {
            //获得riverCrescentNet组的发现和管道服务
            disco = riverCrescentNet.getDiscoveryService();
            pipes = riverCrescentNet.getPipeService();
        } catch (Exception e) {
            statusLabel.setText("状态:过的 RiverCrescentNet 组服务时出现错误!");
            throw e;
        }

        statusLabel.setText("状态:RiverCrescentNet 组已经加入!");
        return;
    }
    private PeerGroupID mkGroupID() throws Exception {
        return (PeerGroupID) IDFactory.fromURL(
             new URL("urn", "", groupURL));
    }
    
    public void findTable(String Attrib,String value,int threshold,JList l){
        this.searchList = l;//用于显示搜索到的组,是一个组件。
        
//        int count = 3;   // 尝试发现组的次数
        
        statusLabel.setText("状态:尝试发现共享文件的组……");

        // 获得 riverCrescentNet 组的发现服务
        DiscoveryService hdisco = riverCrescentNet.getDiscoveryService();

        Enumeration ae = null;   // 保存发现的PeerGroups
        
        FindTableListener ftl = new FindTableListener(tableList,this);
        hdisco.addDiscoveryListener(ftl);
        
        hdisco.getRemoteAdvertisements(null,
        	DiscoveryService.GROUP, Attrib, value, threshold, null);

    }
////////////////////////////////以后要改造成画画的方法
    public void printTables(){
        searchList.removeAll();
        int size = tableList.size();
        String[] s = new String[size];
    	for (int i=0; i<size; i++){
            s[i] = "NO." + (i) + "组(组名):  " + ((PeerGroupAdvertisement)tableList.get(i)).getName();
    	}
        searchList.setListData(s);
    }
    
    /**这个方法用于加入查询来的组,<br>
     *查询来的组被放在一个"列表"组件中,<br>
     *
     *@param index 是列表中的索引值,<br>
     *				即,是哪一个组。<br>
     *@param name  是用户在组中使用的名字或标示。<br>
     *
     *@return 一个String对象,组ID<br>
     *		如果创建新组时失败,返回null。<br>
     *
     *此方法内嵌一个Hashtable:
     *		第一个元素是动作类型;<br>

⌨️ 快捷键说明

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