jointasklistener.java

来自「一个基于NetBeans平台开发的」· Java 代码 · 共 144 行

JAVA
144
字号
/**类似publish的任务监听器,<br>
 *专门负责向JoinedDownloadMessageBuffer和JoinedUploadMessageBuffer中<br>
 *添加缓冲数据。<br>
 *
 *与publish不同的是:<br>
 *此监听器负责两个缓冲区,<br>
 *分别给上传和下载两个独立的任务使用。<br>
 *
 *它还负责启动两个具体工作的任务对象:<br>
 *
 *其中上传的任务与publish没有什么区别,<br>
 *直接加缓冲区即可等待数据的到来;<br>
 *而,下载的任务有些特别:<br>
 *要通过一个方法显示的启动下载任务线程,<br>
 *因为下载任务的缓冲区只有发出请求后,<br>
 *才会有响应数据到达JoinedDownloadMessageBuffer。<br>
 *
 *而发送请求需要首先发现其他的管道通告,<br>
 *所以在打开下载任务前,<br>
 *首先构造一个JoinedDownloadFindRequestListener监听器,<br>
 *这个监听器是把搜索的管道通告存入joinedRequestBuffer,<br>
 *以便下载任务在发送请求时,<br>
 *从joinedRequestBuffer缓冲区取出同奥。<br>
 *
 *@author Sinpool.<br>
 *
 *@version 1.0<br>
 */

package com.sinpool.rivercrescent.Listener;

import net.jxta.pipe.*;
import net.jxta.endpoint.*;
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.*;
import com.sinpool.rivercrescent.myutil.MyUtil;

public class JoinTaskListener implements MyPipeMsgListener{
	private JoinedManagerControl joinedManagerControl = new JoinedManagerControl();
	private JoinedDownloadMessageBuffer jdm = new JoinedDownloadMessageBuffer();
	private JoinedUploadMessageBuffer jum = new JoinedUploadMessageBuffer();
	private JoinedRequestBuffer jrb = new JoinedRequestBuffer();
        private JoinedManagerControl jdfrlManagerControl = new JoinedManagerControl();

	private boolean flag = true;
	private TaskInfo taskInfo = null;
        private JoinedDownloadFindRequestListener jdfrl = null;
	
        private String[] thisStatus = new String[2];
	/**此方法是构造方法,<br>
	 *需要指出此次启动监听器是否为刚加入组而启动的。<br>
	 *
	 *@param ti 完成构造的此任务的TaskInfo对象;<br>
	 *@param first 如果是刚加入组后,第一次启动此监听器,设置为true,<br>
	 *				这个值可以通过JFrame初始化而得到是否原来存在这个任务。<br>
	 */
	public JoinTaskListener(TaskInfo ti){
		this.taskInfo = ti;
	}
	
	/**把收到的消息数据分类存入缓冲区,<br>
	 *Res类型的数据存入JoinedDownloadMessageBuffer
	 *Req类型的消息存入JoinedUploadMessageBuffer
	 */
	public void pipeMsgEvent(PipeMsgEvent event){
		Message msg = event.getMessage();
		BufferedReader br = null;
		InputStream is = null;
		String messageType = null;
		MessageElement me = null;

		try{
			me = msg.getMessageElement("Type");
			is = me.getStream();
			br = new BufferedReader(new InputStreamReader(is) );
			messageType = br.readLine();
		}
		catch (IOException ioe) {}
		
		if ( messageType.equals("Res")){
                        //如果已经下载结束,就不在接受响应了。
                        if ( taskInfo.getTaskPercentage().equals("100.0%") ) return;
			jdm.addElement(msg);
System.out.println("joinTaskListener 收到了一个 Res(响应) 消息。");
thisStatus[0] = MyUtil.getCurrentTime();
thisStatus[1] = "joinTaskListener 收到了一个 Res(响应) 消息。";
taskInfo.getTaskStatusTableModel().addRow(thisStatus);
                }
		else {
			jum.addElement(msg);
System.out.println("joinTaskListener 收到了一个 Req(请求) 消息。");
thisStatus[0] = MyUtil.getCurrentTime();
thisStatus[1] = "joinTaskListener 收到了一个 Req(请求) 消息。";
taskInfo.getTaskStatusTableModel().addRow(thisStatus);
                }
		
		if (flag){
			flag = false;
			JoinedUpload ju = new JoinedUpload(jum,taskInfo,joinedManagerControl);
			
			ju.start();
		}
	}
	
	/**Join任务的特殊之处,<br>
	 *需要使用此方法显示启动现在监听器。<br>
	 */
	public void startJoinDownloadListener(){
		jdfrl = new JoinedDownloadFindRequestListener(jrb,taskInfo,jdfrlManagerControl);
		taskInfo.getTaskPeerGroup().getDiscoveryService().addDiscoveryListener(jdfrl);
		jdfrl.start();
		
		//稍等一会儿,以便JoinedDownloadFindRequestListener监听器先发现管道通告。
		try { Thread.sleep(5000);} catch (Exception e){}
		JoinedDownload jd = new JoinedDownload(jdm,taskInfo,joinedManagerControl,jrb,jdfrl);
		jd.start();
	}
	
	/**关闭此任务监听器,<br>
	 *可以达到关闭此join任务的目的。<br>
	 */
	public void stopListener(){
		joinedManagerControl.stopJoinedManager();
                jdfrlManagerControl.stopJoinedManager();
                jdfrl.interrupt();
                
                //唤醒等待中的download 线程
                Message wakeup_d_msg = new Message();
                ByteArrayMessageElement wakeup_d_MsgTypeElement = new ByteArrayMessageElement("Type",MimeMediaType.XMLUTF8,"Req".getBytes(),null);
                wakeup_d_msg.addMessageElement(wakeup_d_MsgTypeElement);
                jdm.addElement(wakeup_d_msg);
                //唤醒等待中的upload 线程
                Message wakeup_u_msg = new Message();
                ByteArrayMessageElement wakeup_u_MsgTypeElement = new ByteArrayMessageElement("Type",MimeMediaType.XMLUTF8,"Res".getBytes(),null);
                wakeup_u_msg.addMessageElement(wakeup_u_MsgTypeElement);
                jum.addElement(wakeup_u_msg);
	}
}

⌨️ 快捷键说明

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