📄 sender.java
字号:
//: Sender.java
// ݻЭͨŵݷͷ
//package classes;
import java.awt.*;
import java.util.*;
import javax.swing.*;
//import java.lang.*;
public class Sender extends Thread
{
private boolean isRun; // ߳б־
private boolean isPause; // ߳ͣ־
private int sleepTime = 1000; // ߳ʱ
private int time = 30; // ʱʱ
private int maxSeq; // ֡
private int windowSize; // ڴС
private ComChannel channel; // ͨŵ
private SendPanel panel; // ʾ
private int next; // һ֡
private int repeatSeq; // ѡط֡
private int ackExcepted; // һȷ֡
private int nBuffer; // ѱռõĴڴС
private Packet[] buffer; // ֡
private boolean isGoBackN;
private jishi timer; // ʱ
private ReceiveAck receiveAck; // ȷ
Sender(ComChannel channel,int maxSeq,int windowSize,SendPanel panel)
{
this.channel = channel; //
this.maxSeq = maxSeq;
this.windowSize = windowSize;
this.panel = panel;
next = 0; // ʼ
repeatSeq = -1; // ĬûҪѡط֡
ackExcepted = 0;
nBuffer = 0;
isRun = false;
isPause = false;
buffer = new Packet[maxSeq+1];
timer = new jishi(time,this);
receiveAck = new ReceiveAck(this,channel);
if(windowSize==maxSeq) // N֡
{
isGoBackN = true;
}
else // ѡش
{
isGoBackN = false;
}
}
// ʼ
public void start()
{
if(isRun==false)
{
isRun = true;
panel.start(); // ֪ͨʾ
timer.start(); // ʼʱ
receiveAck.start(); // ֪ͨȷϵ߳
super.start();
}
}
// ֹͣ
synchronized public void close()
{
receiveAck.close(); // ֪ͨȷϵ߳
timer.close(); // ֹͣʱ
panel.stop(); // ֪ͨʾ
isRun = false;
synchronized(this)
{
if(this.getState()==Thread.State.WAITING)
{
//System.out.println("ReceiveAck.notify()");//!!!!!!!!!
this.notify(); // ֪ͨ
}
}
System.out.println("ReceiveAck.close()");//!!!!!!!!
}
// ͣ
public void pause()
{
timer.pause(); // ͣʱ
receiveAck.pause(); // ͣȷ
isPause = true;
}
//
public boolean isPause()
{
return isPause;
}
//
synchronized public void continu()
{
isPause = false;
timer.continu();
if(receiveAck!=null)
{
receiveAck.continu(); // ֪ͨȷϵ߳
}
if(this.getState()==Thread.State.WAITING)
{
//System.out.println("ReceiveAck.notify()");//!!!!!!!!!
this.notify(); // ֪ͨ
}
//System.out.println("ReceiveAck.continu()");//!!!!!!!!!
}
// k1ؽ
private int inc(int k)
{
if(k<maxSeq)
{
k++;
}
else
{
k = 0;
}
return k;
}
// k1ؽ
private int dec(int k)
{
if(k>0)
{
k--;
}
else
{
k = maxSeq;
}
return k;
}
// bac֮,ͷtrue;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -