Skip to content

Instantly share code, notes, and snippets.

@amoretspero
Created June 22, 2016 16:24
Show Gist options
  • Save amoretspero/48f1a3cdba88101a4d0489c548f62e34 to your computer and use it in GitHub Desktop.
Save amoretspero/48f1a3cdba88101a4d0489c548f62e34 to your computer and use it in GitHub Desktop.
Data Communication simulation - station class
type station (name : string, chargeTime : int) =
member val name = name
member val backoff = -1 with get, set
member val chargeTime = chargeTime with get, set
member val transmit = false with get, set
member val collisionDetectTime = -1 with get, set
member val transmitTime = -1 with get, set
member val currentPacketNumber = 0 with get, set
member val waitACK = -1 with get, set
member val ackTransmit = false with get, set
member val ackTransmitTime = -1 with get, set
member val binaryCW = 2 with get, set
member val packetTrial = 0 with get, set
member val collision = 0 with get, set
member val packetStart = 0L with get, set
member val packetEnd = 0L with get, set
member st.GeneratePacket () =
let rnd = System.Random()
st.chargeTime <- 0 - (int)(100000.0 * Math.Log(rnd.NextDouble()))
st.currentPacketNumber <- st.currentPacketNumber + 1
member st.IsPacketReady () =
st.chargeTime = 0
member st.ChargePacket () =
st.chargeTime <- st.chargeTime - 1
member st.ConsumeBackoff () =
st.backoff <- st.backoff - 1
member st.updateBinaryCW () =
if st.binaryCW < 1024 then
st.binaryCW <- st.binaryCW * 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment