📄 joineddownloadfindrequestlistener.java
字号:
package com.sinpool.rivercrescent.Listener;
import net.jxta.discovery.*;
import net.jxta.protocol.*;
import net.jxta.peergroup.*;
import net.jxta.document.*;
import java.util.*;
import java.io.*;
import com.sinpool.rivercrescent.Task.*;
import com.sinpool.rivercrescent.BufferZone.*;
import com.sinpool.rivercrescent.interfaces.*;
public class JoinedDownloadFindRequestListener extends Thread implements DiscoveryListener{
private JoinedRequestBuffer joinedRequestBuffer = null;
private String findGroupNameValue = null;
private DiscoveryService discovery = null;
private TaskInfo taskInfo = null;
private String groupName = null;
private JoinedManagerControl jdfrlManagerControl = null;
public JoinedDownloadFindRequestListener(JoinedRequestBuffer joinedRequestBuffer,TaskInfo taskInfo
,JoinedManagerControl jdfrlManagerControl){
this.joinedRequestBuffer = joinedRequestBuffer;
this.taskInfo = taskInfo;
this.discovery = taskInfo.getTaskPeerGroup().getDiscoveryService();
this.groupName = taskInfo.getTaskGroupName();
this.jdfrlManagerControl = jdfrlManagerControl;
}
//每过一分钟,自动搜索网络中有哪些已经发布的管道通告。
public void run() {
try {
findGroupNameValue = this.groupName + ":Pipe:*";
while ( jdfrlManagerControl.searchJoinedManagerState() ) {
this.find_More();
try {
com.sinpool.rivercrescent.myutil.RSConfigure rsc = com.sinpool.rivercrescent.myutil.RSConfigure.readFromDisk();
int interval = rsc.getDefaultTimeThreshold();
Thread.sleep( interval * 60 * 1000);
} catch(Exception e) {}
}
} catch(Exception e) {
e.printStackTrace();
}
}
public void stopListener(){
this.jdfrlManagerControl.stopJoinedManager();
try {this.finalize();} catch (Throwable t) {t.printStackTrace();}
}
public void find_More(){
discovery.getRemoteAdvertisements(null, DiscoveryService.ADV,
"Name", findGroupNameValue , 20);
}
public void discoveryEvent(DiscoveryEvent ev) {
DiscoveryResponseMsg msg = ev.getResponse();
Enumeration e = msg.getResponses();
while (e.hasMoreElements()){
try{
String s = (String) e.nextElement();
PipeAdvertisement adv = (PipeAdvertisement)
AdvertisementFactory.newAdvertisement(
new MimeMediaType("text/xml"),
new ByteArrayInputStream(s.getBytes()));
//如果有与自己管道通告内容相同的通告,就忽略。
if ( taskInfo.getTaskPipeadv().getName().equals(adv.getName()) ) continue;
//判断是否有与缓冲区重复的管道通告
boolean signal = false;
for(int i=0;i<joinedRequestBuffer.size();i++){
if ( ((PipeAdvertisement)joinedRequestBuffer.get(i)).getID().toString().equals(adv.getID().toString()) )
{
signal =true;
break;
}
}
//如果有重复的就读取下一个
if (signal) continue;
//没有重复的才存入缓冲区
joinedRequestBuffer.addElement(adv);
}catch (Exception ex) {System.out.println("JoinedDownloadFindRequestListener里72行出错!");}
}
//最后要去掉自己的通告
System.out.println("joinedDownloadFindRequestListener 发现了"+ joinedRequestBuffer.size() +"个msg。");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -