package Ethernet;
import java.util.HashMap;
public class Host {
int hostId;
Transmitter tstate;
Receiver rstate;
SimulatedTime stime;
int packetSize;
int position; // define this to be the time units from the left-most edge
// of the network
public Host(SimulatedTime parentTime, int pSize, int curPos, int inID)
{
hostId = inID;
tstate = PREPARING;
rstate = IDLE;
stime = parentTime;
packetSize = pSize;
position = curPos;
}
public void AddFutureEvent(SimulatedEvent simEvt)
{
upcomingEvents.put(simEvt.ID, simEvt);
}
/*
whenever you need to cycle through all events that are in the future
call
while(upcomingEvents.values().Iterator().hasNext())
{
}
*/
HashMap<Integer, SimulatedEvent> upcomingEvents;
public void reactToEvent(SimulatedEvent e) {
switch (tstate) {
case EAGER:
if (e.getEventType() == ) {
tstate = Transmitter.PREAMBLE;
}
case PREAMBLE:
if (e.getEventType() == preamble complete) {
if (rstate == Receiever.IDLE) {
tstate = Transmitter.SENDING;
} else {
tstate = Transmitter.JAMMING;
}
}
case JAMMING:
if (e.getEventType() == jamming complete) {
tstate = Transmitter.WAITING;
}
case SENDING:
if (e.getEventType() == receiver becomes busy) {
tstate = Transmitter.JAMMING;
} else if (e.getEventType() == transmission complete) {
tstate = Transmitter.PREPARING;
}
case PREPARING:
if (e.getEventType() == packet ready ) {
if (rstate == Receiever.IDLE) {
tstate = Transmitter.PREAMBLE;
} else {
tstate = Transmitter.EAGER;
}
}
case WAITING:
if (e.getEventType() == packet aborted) {
tstate = Transmitter.PREPARING;
} else if (e.getEventType() == Backoff complete) {
if (rstate == Receiever.IDLE) {
tstate = Transmitter.PREAMBLE;
} else {
tstate = Transmitter.EAGER;
}
}
}
switch (rstate) {
case BUSY:
if (e.getEventType() == end of signal detected ) {
rstate = Receiver.GAP;
}
case GAP:
if (e.getEventType() == period of 9.6 microseconds elapsed) {
rstate = Receiver.IDLE;
}
case IDLE:
if (e.getEventType() == incoming signal detected ) {
rstate = Receiver.GAP;
}
}
}
public enum Transmitter {
EAGER, PREPARING, PREAMBLE, SENDING, JAMMING, WAITING
}
public enum Receiver {
BUSY, GAP, IDLE
}
}