📄 timer.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 + -