Created
June 22, 2016 16:24
-
-
Save amoretspero/48f1a3cdba88101a4d0489c548f62e34 to your computer and use it in GitHub Desktop.
Data Communication simulation - station class
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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