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

📄 timer.java

📁 Java+Eclipse+Mysql的局域网聊天程序源代码
💻 JAVA
字号:
class Timer implements Runnable
{
	private MsgVector []msgvector;
	private MsgVector []msgvectorend;
	private int []numofmsg;
	
	private boolean goon=true;
	
	private Thread t=null;
	private SendMsg sm=null;
	private ReceivMsg rm=null;
	public Timer(SendMsg sm,ReceivMsg rm)
	{
		this.msgvector=sm.msgvector;
		this.msgvectorend=sm.msgvectorend;
		this.numofmsg=sm.numofmsg;
		
		this.rm=rm;         
		this.sm=sm;
	}
	public void start()
	{
		t=new Thread(this);
		t.start();
	}
	public void stop()
	{
		goon=false;
	}
	public void run()
	{
		while(goon)
		{
			CheckMsgSended(); //检查是否有发送后3秒内没有收到回应的数据包
			try
			{
				t.sleep(100);
			}
			catch(InterruptedException ie)
			{
				ie.printStackTrace();
			}
			
		}
	}
	private void CheckMsgSended()
	{
		while(goon) 
		{
			MsgVector cp_msgvector=null,temp_msgvector=null;
			cp_msgvector=msgvector[1];
			while(cp_msgvector.next!=null)
			{
				String time=String.valueOf(System.currentTimeMillis());
				String tempmsg=time.substring(time.length()-5,time.length());
				long time_int=Integer.parseInt(tempmsg);        //取当前时间的后五位
				
				if(time_int-cp_msgvector.next.time>=3000)
				{
					//如果有发送后3秒内没有收到回应的数据包
					if(cp_msgvector.next.sendedtimes<3)  //如果发送失败次数未达到3次,则自动重发
					{
						reSend(temp_msgvector,cp_msgvector);		
					}
					else   //如果失败次数大于3次
					{
						/*
						 * 检查该包是否可直接丢弃
						 * 如果可以,则直接抛弃
						 * 如果不可以,则弹出提示
						 */
						if(cp_msgvector.next.needquest)  //如果该数据包需要提示重发
						{
							/*
							 * 弹出"是否重试"提示框
							 */
							Alert at=new Alert();    //弹出提示框
							if(at.needRetry())      //如果用户选择重发
							{
								cp_msgvector.next.sendedtimes=0;  //清空该数据包发送次数,并重发
								reSend(temp_msgvector,cp_msgvector);
							}
							else                     //如果用户选择抛弃该数据包
							{
								dropMsg(cp_msgvector);  //抛弃该数据包
							}
						}
						else       //如果该数据包不需要询问用户
						{
							/*
							 * 丢弃数据包
							 */
							dropMsg(cp_msgvector);  //抛弃该数据包
						}
					}
				}
				cp_msgvector=cp_msgvector.next;
			}
		}
	}
	private void reSend(MsgVector temp_msgvector,MsgVector cp_msgvector)
	{
		temp_msgvector=cp_msgvector.next;
		cp_msgvector.next=cp_msgvector.next.next;
		
		temp_msgvector.next=msgvector[0].next;
		msgvector[0].next=temp_msgvector;
	}
	private void dropMsg(MsgVector cp_msgvector)
	{
		cp_msgvector.next=cp_msgvector.next.next;
	}
}

⌨️ 快捷键说明

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