public MobileTerminalState UpdateMobileTerminalStateWhenAdmitingNewCallToOngoingSession(IEnumerable <ICall> activeCalls)
        {
            if (activeCalls == null)
            {
                throw new VerticalHandoverPredictionException($"{nameof(activeCalls)} is null");
            }

            if (activeCalls.Count() == 1 || activeCalls.Count() == 0 || activeCalls.Count() > 3)
            {
                throw new VerticalHandoverPredictionException($"{nameof(activeCalls)} can not have {activeCalls.Count()} calls");
            }

            var ongoingServices = activeCalls.Select(x => x.Service);

            MobileTerminalState state = MobileTerminalState.VoiceDataVideo;

            if (activeCalls.Count() == 2)
            {
                if (ongoingServices.Intersect(new List <Service> {
                    Service.Voice, Service.Data
                }).Count() == ongoingServices.Count())
                {
                    state = MobileTerminalState.VoiceData;
                    SetState(state);
                }
                if (ongoingServices.Intersect(new List <Service> {
                    Service.Voice, Service.Video
                }).Count() == ongoingServices.Count())
                {
                    state = MobileTerminalState.VoiceVideo;
                    SetState(state);
                }
                if (ongoingServices.Intersect(new List <Service> {
                    Service.Video, Service.Data
                }).Count() == ongoingServices.Count())
                {
                    state = MobileTerminalState.VideoData;
                    SetState(MobileTerminalState.VideoData);
                }
            }
            else
            {
                SetState(MobileTerminalState.VoiceDataVideo);
            }
            return(state);
        }
        public static IList <Service> SupportedServices(this MobileTerminalState state)
        {
            var services = new List <Service>();

            switch (state)
            {
            case MobileTerminalState.Idle:
                break;

            case MobileTerminalState.Data:
                services.Add(Service.Data);
                break;

            case MobileTerminalState.Video:
                services.Add(Service.Video);
                break;

            case MobileTerminalState.Voice:
                services.Add(Service.Voice);
                break;

            case MobileTerminalState.VideoData:
                services.Add(Service.Video);
                services.Add(Service.Data);
                break;

            case MobileTerminalState.VoiceData:
                services.Add(Service.Data);
                services.Add(Service.Voice);
                break;

            case MobileTerminalState.VoiceVideo:
                services.Add(Service.Voice);
                services.Add(Service.Video);
                break;

            case MobileTerminalState.VoiceDataVideo:
                services.Add(Service.Data);
                services.Add(Service.Voice);
                services.Add(Service.Video);
                break;
            }

            return(services);
        }
        public static MobileTerminalState GetState(this Service service)
        {
            MobileTerminalState state = default(MobileTerminalState);

            switch (service)
            {
            case Service.Voice:
                state = MobileTerminalState.Voice;
                break;

            case Service.Video:
                state = MobileTerminalState.Video;
                break;

            case Service.Data:
                state = MobileTerminalState.Data;
                break;
            }
            return(state);
        }
 public void SetState(MobileTerminalState state) => State = state;
示例#5
0
 public void RemoveFromSessionSequence(MobileTerminalState state) => _sessionSequence.Remove(state);
示例#6
0
 public void AddToSessionSequence(MobileTerminalState state) => _sessionSequence.Add(state);