Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.Color;
- public class BaseStation extends Terminal
- {
- private MobileStation curSender;
- class State
- {
- static final int idle = 0;
- static final int SIFS_before_emitCTS = 1;
- static final int emitCTS = 2;
- static final int SIFS_before_rcvPKT = 3;
- static final int rcvPKT = 4;
- static final int SIFS_before_emitACK = 5;
- static final int emitACK = 6;
- }
- public BaseStation(String string, SimTimer simtimer) {
- super(string, simtimer);
- }
- //Implement Protocol State Machine
- private void activeAction() {
- switch (state) {
- case State.idle :
- break;
- case State.SIFS_before_emitCTS :
- if (elapsedTime(3))
- changeState(State.emitCTS);
- break;
- case State.emitCTS :
- if (elapsedTime(15)) {
- myChannel.receptionAction(emmitedPacket);
- changeState(State.SIFS_before_rcvPKT);
- }
- break;
- case State.SIFS_before_rcvPKT :
- if (elapsedTime(3)) {
- changeState(State.rcvPKT);
- }
- break;
- case State.rcvPKT :
- if (elapsedTime(61)) {
- changeState(State.idle);
- }
- break;
- case State.SIFS_before_emitACK :
- if (elapsedTime(3)) {
- changeState(State.emitACK);
- }
- break;
- case State.emitACK :
- if (elapsedTime(10)) {
- System.out.println("Sending ACK to " + emmitedPacket.getOwner().toString());
- myChannel.receptionAction(emmitedPacket);
- changeState(State.idle);
- }
- break;
- }
- }
- protected void changeState(int i) {
- super.changeState(i);
- if (i == 2)
- emmitedPacket = new Packet(curSender, 2);
- if (i == 6)
- emmitedPacket = new Packet(curSender, 4);
- }
- public boolean emmiting() {
- return state == 6 || state == 2;
- }
- protected Color getChannelColor() {
- return Color.white;
- }
- protected Color getStateColor() {
- Color color = Color.white;
- switch (state) {
- case 2:
- color = new Color(0, 0, 128);
- break;
- case 6:
- color = new Color(128, 0, 0);
- break;
- }
- return color;
- }
- // Implement Protocol State Machine (Receive portion)
- public void receptionAction(Packet packet) {
- System.out.println("Received a packet from " + packet.getOwner().toString());
- if (state == State.idle) {
- System.out.println("BaseStation is in state idle");
- System.out.println("The packet is corrupted: " + packet.getCorrupted(this));
- if (packet.getType() == Packet.RTS && !packet.getCorrupted(this)) {
- System.out.println("BaseStation sending CTS to " + packet.getOwner().toString());
- curSender = packet.getOwner();
- changeState(State.SIFS_before_emitCTS);
- }
- }
- if (packet.getType() == Packet.PKT && packet.getOwner() == curSender) {
- System.out.println("Received data from " + packet.getOwner().toString());
- changeState(State.SIFS_before_emitACK);
- }
- }
- public void update() {
- activeAction();
- this.graphicUpdate();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement