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

📄 transition.java

📁 有限状态机状态转换
💻 JAVA
字号:
import java.util.Hashtable;
import java.util.*;
public class Transition{
	
	State CLOSED=new State("CLOSED");
	State LISTEN=new State("LISTEN");
	State SYN_RCVD=new State("SYN_RCVD");
	State FIN_WAIT_1=new State("FIN_WAIT_1");
	State FIN_WAIT_2=new State("FIN_WAIT_2");
	State CLOSING=new State("CLOSING");
	State TIME_WAIT=new State("TIME_WAIT");
	State LAST_ACK=new State("LAST_ACK");
	State CLOSE_WAIT=new State("CLOSE_WAIT");
	State SYN_SENT=new State("SYN_SENT");
	State ESTABLISHED=new State("ESTABLISHED");
	
	
	ArrayList events=new ArrayList();
	
    FSMEvent PASSIVE=new FSMEvent("PASSIVE"); 
	FSMEvent ACTIVE=new FSMEvent("ACTIVE"); 
	FSMEvent SYN=new FSMEvent("SYN"); 
	FSMEvent SYNACK=new FSMEvent("SYNACK"); 
	FSMEvent ACK=new FSMEvent("ACK"); 
	FSMEvent RDATA=new FSMEvent("RDATA"); 
	FSMEvent SDATA=new FSMEvent("SDATA"); 
	FSMEvent FIN=new FSMEvent("FIN"); 
	FSMEvent CLOSE=new FSMEvent("CLOSE"); 
	FSMEvent TIMEOUT=new FSMEvent("TIMEOUT");
	
	State c=CLOSED;
	
	public Transition(){
		
		 
		 
		 CLOSED.addTransition(PASSIVE,LISTEN);
		 CLOSED.addTransition(ACTIVE,SYN_SENT);
		 CLOSED.addTransition(SYN,SYN_SENT);
		 
		 LISTEN.addTransition(SYNACK,SYN_RCVD);
		 LISTEN.addTransition(SYN,SYN_RCVD);
		 
		 SYN_RCVD.addTransition(FIN,FIN_WAIT_1);
		 SYN_RCVD.addTransition(CLOSE,FIN_WAIT_1);
		 
		 FIN_WAIT_1.addTransition(ACK,FIN_WAIT_2);
		 FIN_WAIT_1.addTransition(FIN,CLOSING);
		 
		 FIN_WAIT_2.addTransition(FIN,TIME_WAIT);
		 FIN_WAIT_2.addTransition(ACK,TIME_WAIT);
		 
		 SYN_SENT.addTransition(CLOSE,CLOSED);
		 SYN_SENT.addTransition(SYNACK,ESTABLISHED);
		 SYN_SENT.addTransition(ACK,ESTABLISHED);
		 
		 ESTABLISHED.addTransition(FIN,CLOSE_WAIT);
		 ESTABLISHED.addTransition(ACK,CLOSE_WAIT);
		 ESTABLISHED.addTransition(SDATA,ESTABLISHED);
		 ESTABLISHED.addTransition(RDATA,ESTABLISHED);
		 
		 CLOSE_WAIT.addTransition(CLOSE,LAST_ACK);
		 CLOSE_WAIT.addTransition(FIN,LAST_ACK);
		 
		 LAST_ACK.addTransition(ACK,CLOSED);
		 
		 
	}
	
	public FSMEvent StrEvent(String e){
    FSMEvent event=new FSMEvent();
    if(e.equals("PASSIVE")){
    	event=PASSIVE;
    }
    else if(e.equals("ACTIVE")){
    	event=ACTIVE;
    }
     else if(e.equals("SYN")){
    	event=SYN;
    }
     else if(e.equals("SYNACK")){
    	event=SYNACK;
    }
     else if(e.equals("ACK")){
    	event=ACK;
    }
     else if(e.equals("RDATA")){
    	event=RDATA;
    }
     else if(e.equals("SDATA")){
    	event=SDATA;
    }
     else if(e.equals("FIN")){
    	event=FIN;
    }
     else if(e.equals("CLOSE")){
    	event=CLOSE;
    }
      
    return event;
	}
	
	public String StateTransit(String e){ 
	    State o=c;
		c=(State)c.nextState.get(StrEvent(e));
		return o.name+"接受状态"+e+",转移到"+c.name;
	}
	
	
	public State StateTrans(){	
    	 return (State)CLOSED.nextState.get(PASSIVE);
	}

}

⌨️ 快捷键说明

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