📄 selectpeer.java
字号:
/* * Created on 7-set-2005 * * *//** * @author magowiz * */package p2p_system;import java.io.IOException;import java.util.Enumeration;import net.jxta.discovery.DiscoveryEvent;import net.jxta.discovery.DiscoveryListener;import net.jxta.discovery.DiscoveryService;import net.jxta.document.Advertisement;import net.jxta.id.ID;import net.jxta.peergroup.PeerGroup;import net.jxta.protocol.DiscoveryResponseMsg;import net.jxta.protocol.PeerAdvertisement;public class SelectPeer implements DiscoveryListener { private ID [] pids ; private int pidx,idx; private PeerGroup pg; private DiscoveryService discoSvc; private int N; private PeerAdvertisement padv; public SelectPeer(PeerGroup p,int n) { pg=p; padv=pg.getPeerAdvertisement(); discoSvc=pg.getDiscoveryService(); discoSvc.addDiscoveryListener(this); pidx=0; idx=0; N=n; pids=new ID[N]; for (int i=0; i<N;i++) pids[i]=null; } public synchronized void discover () { //System.out.println("Sending a Discovery Message"); // look for any peer discoSvc.getRemoteAdvertisements(null, DiscoveryService.PEER, null, null, 2*N+1); } public synchronized void reset() { for (int i=0; i<N;i++) pids[i]=null; pidx=0; idx=0; flush(); } public void flush() { try { Enumeration en = discoSvc.getLocalAdvertisements(DiscoveryService.PEER, null, null); while (en.hasMoreElements()) { discoSvc.flushAdvertisement( (Advertisement) en.nextElement()); } } catch (IOException io) { io.printStackTrace(); } } public void republish() { Advertisement a; a=padv; long lifetime1,lifetime2; lifetime1=120000; lifetime2=0; try {discoSvc.publish(a,lifetime1,lifetime2);} catch(IOException ioe){System.out.println(ioe.toString());} } public boolean enoughPeers() { boolean r=false; if(pidx==N) r=true; return r; } public synchronized void discoveryEvent(DiscoveryEvent ev) { DiscoveryResponseMsg res = ev.getResponse(); PeerAdvertisement peerAdv =null; //PeerGroupAdvertisement pgadv=null; Enumeration en = res.getAdvertisements(); if (en != null ) { while (en.hasMoreElements()) { peerAdv = (PeerAdvertisement) en.nextElement(); if ((!(alreadyKnow(peerAdv.getPeerID())))&&(pidx<N)) { pids[pidx]=peerAdv.getPeerID(); pidx++; } } } } public synchronized ID getID() { ID id=null; if(pids[idx]!=null){id=pids[idx];idx++;} return id; } private boolean alreadyKnow(ID i) { boolean r=false; for (int j=0;j<N;j++) { if((pids[j]!=null)&&(i.equals(pids[j]))) { r=true; } if((pids[j]!=null)&&(i.equals(pg.getPeerID()))) { r=true; } } return r; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -