public ObservableUsbTemper()
        {
            UsbTEMPer[] devices = UsbTEMPer.FindDevices()
                                  .Select((port, idx) => new UsbTEMPer(idx))
                                  .ToArray();
            var thermometer = devices.First();


            var txs = Observable.Generate(0, _ => true, t => t, t => thermometer.GetTemperature(), Scheduler.Default)
                      .Skip(1)
                      .Replay(1);

            TemperatureStreamCelcius     = txs;
            TemperatureStreamFarenheight = txs.Select(UsbTEMPer.CelsiustoFarenheight);

            IDisposable txsConnect  = txs.Connect();
            var         disposables = (new[] { txsConnect }).Concat(devices);

            _disp = new CompositeDisposable(disposables);
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            AppDomain.CurrentDomain.UnhandledException += (sender, e) => Console.Error.WriteLine(e.ExceptionObject);

            if (args.Length >= 0)
            {
                JsConfig.DateHandler = JsonDateHandler.ISO8601;

                string host = args.Length == 0 ? "localhost" : args.First();

                var redisClient = new RedisClient(host);
                var temprc      = redisClient.As <TemperatureItem>();
                var rtempList   = temprc.Lists["tempatureReadings"];

                //Console.WriteLine(temprc.GetAllItemsFromList(rtempList).First().Timestamp);
                //Console.WriteLine(temprc.GetAllItemsFromList(rtempList).Last().Temperature);

                Console.WriteLine(string.Join("\n", UsbTEMPer.FindDevices().ToArray()));
                var xs    = new ObservableUsbTemper();
                var temps = xs.TemperatureStreamFarenheight
                            .Timestamp()
                            .Do(ts => Console.WriteLine(ts));

                var sub = temps.Select(TemperatureItem.FromTDS)
                          .Subscribe(tst => temprc.AddItemToList(rtempList, tst), Console.Error.WriteLine, () => { });

                var disp = new CompositeDisposable(xs, redisClient, sub);
                Console.ReadKey();
                disp.Dispose();
            }
            else
            {
                ServiceBase.Run(new ServiceBase[]
                {
                    new TempLoggerService()
                });
            }
        }