private void Reset() { busyWith = null; freeEvent = null; sleepEvent = null; packetToSend = null; REGION_index = 0; COL_count = 0; SENSE_count = 0; PKT_count = 0; SINK_RTS_count = 0; REGION_cycle = 0; }
// called only if relay is either free or already busy with the reserver public void Reserve(Relay reserver, Event cause) { if (this.status == RelayStatus.Free || this.busyWith == reserver) { // remove sleep (handle sleep when Free occurs) if (sleepEvent != null) { sim.eventQueue.Remove(sleepEvent); sleepEvent = null; } if (reserver == this) { throw new Exception("Can't use Reserve on self, use SelfReserve instead"); } else { if (busyWith == null) { busyWith = reserver; freeEvent = new FreeEvent { time = sim.clock + sim.protocolParameters.t_busy, relay = this, sim = sim, previous = cause }; sim.eventQueue.Add(freeEvent); } else { freeEvent.time = sim.clock + sim.protocolParameters.t_busy; sim.eventQueue.Reschedule(freeEvent); } } } else { throw new Exception("Cannot reserve this relay"); } }