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);
            }
        }
Esempio n. 2
0
        //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);
        }