Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.47 KB | None | 0 0
  1. import java.awt.Color;
  2.  
  3. public class BaseStation extends Terminal
  4. {
  5.     private MobileStation curSender;
  6.    
  7.     class State
  8.     {
  9.     static final int idle = 0;
  10.     static final int SIFS_before_emitCTS = 1;
  11.     static final int emitCTS = 2;
  12.     static final int SIFS_before_rcvPKT = 3;
  13.     static final int rcvPKT = 4;
  14.     static final int SIFS_before_emitACK = 5;
  15.     static final int emitACK = 6;
  16.     }
  17.    
  18.     public BaseStation(String string, SimTimer simtimer) {
  19.     super(string, simtimer);
  20.     }
  21.    
  22.  
  23.     //Implement Protocol State Machine
  24.     private void activeAction() {
  25.         switch (state) {
  26.             case State.idle :
  27.                 break;
  28.             case State.SIFS_before_emitCTS :
  29.                 if (elapsedTime(3))
  30.                     changeState(State.emitCTS);
  31.                 break;
  32.            
  33.             case State.emitCTS :
  34.                 if (elapsedTime(15)) {
  35.                     myChannel.receptionAction(emmitedPacket);
  36.                     changeState(State.SIFS_before_rcvPKT);
  37.                 }
  38.                 break;
  39.             case State.SIFS_before_rcvPKT :
  40.                 if (elapsedTime(3)) {
  41.                     changeState(State.rcvPKT);
  42.                 }
  43.                 break;
  44.             case State.rcvPKT :
  45.                 if (elapsedTime(61)) {
  46.                     changeState(State.idle);
  47.                 }
  48.                 break;
  49.             case State.SIFS_before_emitACK :
  50.                 if (elapsedTime(3)) {
  51.                     changeState(State.emitACK);
  52.                 }
  53.                 break;
  54.             case State.emitACK :
  55.                 if (elapsedTime(10)) {
  56.                     System.out.println("Sending ACK to " + emmitedPacket.getOwner().toString());
  57.                     myChannel.receptionAction(emmitedPacket);
  58.                     changeState(State.idle);
  59.                 }
  60.                 break;
  61.         }
  62.     }
  63.    
  64.     protected void changeState(int i) {
  65.     super.changeState(i);
  66.     if (i == 2)
  67.         emmitedPacket = new Packet(curSender, 2);
  68.     if (i == 6)
  69.         emmitedPacket = new Packet(curSender, 4);
  70.     }
  71.    
  72.     public boolean emmiting() {
  73.     return state == 6 || state == 2;
  74.     }
  75.    
  76.     protected Color getChannelColor() {
  77.     return Color.white;
  78.     }
  79.    
  80.     protected Color getStateColor() {
  81.     Color color = Color.white;
  82.     switch (state) {
  83.     case 2:
  84.         color = new Color(0, 0, 128);
  85.         break;
  86.     case 6:
  87.         color = new Color(128, 0, 0);
  88.         break;
  89.     }
  90.     return color;
  91.     }
  92.  
  93.     // Implement Protocol State Machine (Receive portion)
  94.     public void receptionAction(Packet packet) {
  95.         System.out.println("Received a packet from " + packet.getOwner().toString());
  96.         if (state == State.idle) {
  97.             System.out.println("BaseStation is in state idle");
  98.             System.out.println("The packet is corrupted: " + packet.getCorrupted(this));
  99.             if (packet.getType() == Packet.RTS && !packet.getCorrupted(this)) {
  100.                 System.out.println("BaseStation sending CTS to " + packet.getOwner().toString());
  101.                 curSender = packet.getOwner();
  102.                 changeState(State.SIFS_before_emitCTS);
  103.             }
  104.         }
  105.         if (packet.getType() == Packet.PKT && packet.getOwner() == curSender) {
  106.             System.out.println("Received data from " + packet.getOwner().toString());
  107.             changeState(State.SIFS_before_emitACK);
  108.         }
  109.     }
  110.    
  111.     public void update() {
  112.     activeAction();
  113.     this.graphicUpdate();
  114.     }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement