private void SetupMobileApi() { var library = Locator.Current.GetService <Library>(); this.Log().Info("Remote control is {0}", this.coreSettings.EnableRemoteControl ? "enabled" : "disabled"); this.Log().Info("Port is set to {0}", this.coreSettings.Port); IObservable <MobileApi> apiChanged = this.coreSettings.WhenAnyValue(x => x.Port).DistinctUntilChanged() .CombineLatest(this.coreSettings.WhenAnyValue(x => x.EnableRemoteControl), Tuple.Create) .Do(_ => { if (this.mobileApi != null) { this.mobileApi.Dispose(); this.mobileApi = null; } }) .Where(x => x.Item2) .Select(x => x.Item1) .Select(x => new MobileApi(x, library)).Publish(null).RefCount().Where(x => x != null); apiChanged.Subscribe(x => { this.mobileApi = x; x.SendBroadcastAsync(); x.StartClientDiscovery(); }); IConnectableObservable <IReadOnlyList <MobileClient> > connectedClients = apiChanged.Select(x => x.ConnectedClients).Switch().Publish(new List <MobileClient>()); connectedClients.Connect(); IConnectableObservable <bool> isPortOccupied = apiChanged.Select(x => x.IsPortOccupied).Switch().Publish(false); isPortOccupied.Connect(); var apiStats = new MobileApiInfo(connectedClients, isPortOccupied); Locator.CurrentMutable.RegisterConstant(apiStats, typeof(MobileApiInfo)); }
public void Init() { instance = new MobileApi(); }