public void EndCall(CallEndedEvent evt) { if (evt == null) { throw new VerticalHandoverPredictionException($"{nameof(evt)} is null"); } var session = HetNet.Instance.Rats .SelectMany(x => x.OngoingSessions) .FirstOrDefault(x => x.SessionId == this.SessionId); var rat = HetNet.Instance.Rats .FirstOrDefault(x => x.RatId == session.RatId); var call = session.ActiveCalls.FirstOrDefault(x => x.CallId == evt.CallId); rat.RealeaseNetworkResources(call.Service.ComputeRequiredNetworkResources()); session.RemoveFromActiveCalls(call); var state = UpdateMobileTerminalState(session); session.AddToSessionSequence(state); if (state == MobileTerminalState.Idle) { EndSession(session, evt.Time, rat); } }
//First time you run this generate call history public void GenerateCalls(int numberOfCalls) { for (int i = 0; i < numberOfCalls; i++) { var service = Services.PickRandom(); var mobileTerminal = HetNet.Instance.MobileTerminals.PickRandom(); var call = new Call(mobileTerminal.MobileTerminalId, service); var callStartedEvent = new CallStartedEvent( DateTime.Now.AddMinutes(1 + (60 - 1) * random.NextDouble()), call); var callEndedEvent = new CallEndedEvent( call.CallId, call.MobileTerminalId, callStartedEvent.Time.AddMinutes(GenerateCallLifetime(service))); EventQueue.Enqueue(callStartedEvent); EventQueue.Enqueue(callEndedEvent); } ServeEventQueue(false); }