1. 搜索功能的实现
本书采用基于目录服务的文件共享方式,目录服务器保存它所连接的所有普通节点的IP地址和对应地址下的可共享学习资料的主题或关键词,提供目录检索服务。实现结果如图4.6所示,主要程序设计如下。
(1) MySearchListener类的作用是监听其他节点(peer)对本服务器上资源的检索,实现了接口SearchListener,实现接口下定义的方法——queryReceived()方法,当某个节点发出的检索请求到达本服务器时,会激发queryReceived(String)方法,检索到本服务器上的资源。
class MySearchListener implements SearchListener
{
public void queryReceived(String queryString)
{
System.out.println("List request with query \""+ queryString+"\" received.");
}
}
(2) 当检索结果返回时,检索结果以ContentAdvertisement[]的形式存在,我们首先将结果放到类变量results中,然后将结果显示到一个JList的Model∶ result_listModel中。
protected void updateResults(ContentAdvertisement[] results)
{
this.results = results;
result_listModel.removeAllElements(); //删除原有的结果
//插入新的结果到result_listMode中
for (int i=0; i,result_listModel.addElement(results[i].getName())
}
从检索结果中选择需要下载的资料,根据资料所对应的地址进行链接并获取资料。程序设计如下,实现结果如图4.6所示。
VisibleContentRequest文件下载类从GetContentRequest类继承并实现ActionListener_接口;
//定义成员变量
JDialog dialog;//用于显示当前下载情况
JProgressBar statusBar;//显示当前下载进度
JButton cancelButton;//用于取消当前下载
//对GetContentRequest类中下列方法重新实现
notifyDone();//下载完成时被调用
notifyFailure();//下载失败时被调用
notifyUpdate(int percentage);// 当文件中更多的部分被下载时被调用
class VisibleContentRequest extends GetContentRequest implements ActionListener
{
JDialog dialog;
JProgressBar statusBar = new JProgressBar();
JButton cancelButton = new JButton("Stop");
public VisibleContentRequest(JFrame parent, ContentAdvertisement source
File destination)
{
super(netPeerGroup, source, destination);
dialog = new JDialog(parent, "Downloading "+destination.getName());
dialog.setSize(240, 80);
dialog.setLocation(400,400);
statusBar.setStringPainted(true);
dialog.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER));
dialog.getContentPane().add(statusBar);
cancelButton.addActionListener(this);
dialog.getContentPane().add(cancelButton);
dialog.setVisible(true);
}
public void actionPerformed(ActionEvent ae)
{
//单击”stop”按钮暂停进程运行
if(ae.getSource() == cancelButton)
{
cancel();
System.out.println("download of " + getFile()+ " cancelled by user.");
dialog.dispose();(www.daowen.com)
dialog = null;
}
}
//下载完成时被调用
public void notifyDone()
{
System.out.println("download of "+getFile()+" done.");
dialog.dispose();
dialog = null;
}
// 下载失败时被调用
public void notifyFailure()
{
System.out.println("download of "+getFile()+" failed.");
}
//当文件中更多的部分被下载时被调用
public void notifyUpdate(int percentage)
{
statusBar.setValue(percentage);
}
}
2. 共享功能的实现
共享资料是为协作成员间共享或推荐文档、资料、应用程序等资源提供的功能模块,协作小组中每个成员都有权利上传资料,并对其他协作成员都是可见的。上载的资料使用数据库技术记录其相对位置,然后使用ASP生成资料的链接,以供下载。主要程序设计如下,实现结果如图4.6所示。
图4.6
(1) 首先添加一个方法private void updateLocalFiles()用于将当前机器的CMS中共享的内容显示到j List2中:
private void updateLocalFiles()
{
ContentManager.getContent() //获取被当前节点共享的所有内容
Content[] content = cms.getContentManager().getContent();
//从j List2的Model中删除原有的共享内容
file_listModel.removeAllElements();
//把当前的内容添加到j List2中
for (int i=0; i<sl.length; i++)
{
file_listModel.addElement(content[i].getContentAdvertisement().getName());
}
}
(2) 取消原有共享内容,使用cms.getContentManager().getContent()当前节点共享的文件的ContentAdvertisement数组,然后使用cms.getContentManager().unshared (ContentAdvertisement content)方法将原有共享的内容去除共享。
cms.getContentManager().unshared()
{
void jButton3_actionPerformed(ActionEvent e)
{
try
{
cms.getContentManager().unshare(cms.getContentManager().getContent()[jList2.
getSelectedIndex()]);
}
catch(IOException ex)
{
System.out.println("不能移去该共享文件");
}
this.updateLocalFiles();
}
}
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。