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

📄 sink.java

📁 这是一个虚拟网络模拟器
💻 JAVA
字号:
//: Sink.java
// ݻЭͨŵݽշ
//package classes;
import java.awt.*;
import java.util.*;
import javax.swing.*;

class Sink extends Thread
{
	private boolean isRun;			// ߳б־
	private boolean isPause;		// ߳ͣ־
	private int sleepTime = 2000;	// ߳ʱ
	private int maxSeq;				// ֡
	private int windowSize;			// ڴС
	private ComChannel channel;		// ͨŵ
	private SinkPanel  panel;		// ʾ
	
	private int frameExpected;		// һӦõ֡
	private int tooFar;				// Ͻ1
	private boolean isGoBackN;	
	private Packet[]  buffer;		// ֡
	private boolean[] arrived;		// Ӧŵ֡Ƿѵ
	
	Sink(ComChannel channel,int maxSeq,int windowSize,SinkPanel panel)
	{
		this.channel = channel;		// 
		this.maxSeq  = maxSeq;
		this.windowSize = windowSize; 
		this.panel   = panel;
		
		isRun        = false;		// ʼ
		isPause      = false;
		frameExpected= 0;
		tooFar       = windowSize;
		//nBuffer =0;
		buffer  = new Packet[windowSize];
		arrived = new boolean[windowSize];
		if(windowSize==1)			// N֡
		{
			isGoBackN = true;
		}
		else						// ѡش
		{
			isGoBackN = false;
		}
	}
	
	//ʼ
	public void start()
	{
		if(isRun==false)
		{
			isRun = true;
			for(int i=0;i<arrived.length;i++)
			{
				arrived[i] = false;
			}
			panel.start();			// ֪ͨʾ
			super.start();
		}
	}
	
	//ֹͣ
	public void close()
	{
		isRun = false;
		panel.stop();				// ֪ͨʾ
		synchronized(this)
		{			
			if(this.getState()==Thread.State.WAITING)
			{
				//System.out.println("ReceiveAck.notify()");//!!!!!!!!!
				this.notify();	// ֪ͨ
			}
		}
	}
	
	// ͣ
	public void pause()
	{
		isPause = true;
	}
	
	// 
	public void continu()
	{
		isPause = false;
		synchronized(this)
		{			
			if(this.getState()==Thread.State.WAITING)
			{
				//System.out.println("ReceiveAck.notify()");//!!!!!!!!!
				this.notify();	// ֪ͨ
			}
		}
	}
	
	// 
	private DataFrame receive()
	{
		return channel.popData();
	}
	
	private int inc(int k)
	{
		if(k<maxSeq)
		{
			k++;
		}
		else
		{
			k = 0;
		}
		return k;
	}
	
	// ȷ
	private void sendAck(int seq, int kind)
	{
		DataFrame frame = new DataFrame();
		frame.setKind(kind);
		frame.setAck(seq);
		//System.out.println("send ACk = "+seq);//!!!!!!!!!!
		channel.pushAck(frame);
	}
	
	// bac֮,ͷtrue;

⌨️ 快捷键说明

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