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;
public void RemoveFromSessionSequence(MobileTerminalState state) => _sessionSequence.Remove(state);
public void AddToSessionSequence(MobileTerminalState state) => _sessionSequence.Add(state);