예제 #1
0
        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));
        }
예제 #2
0
 public void Init()
 {
     instance = new MobileApi();
 }