Ejemplo n.º 1
0
        private void OnDeviceSeen(object sender, AtemDeviceInfo info)
        {
            var id = info.Id();

            lock (_devices)
            {
                if (_devices.TryGetValue(id, out AtemDevice device))
                {
                    device.Info = info;

                    // If remembered, sync changes to the db
                    if (device.Remember)
                    {
                        _dbDevices.Update(id, device);
                    }
                }
                else
                {
                    _devices[id] = new AtemDevice(info);
                    Log.InfoFormat("Discovered device: {0}", info.ToString());
                }

                SendDevicesDebounce();
            }
        }
Ejemplo n.º 2
0
        public Tuple <bool, IReadOnlyList <AtemDevice> > AddDevice(string address, int port)
        {
            var id = AtemDeviceExt.Id(address, port);

            lock (_devices)
            {
                if (_devices.TryGetValue(id, out AtemDevice device))
                {
                    device.Remember = true;
                    device.Enabled  = true;


                    _dbDevices.Upsert(id, device);

                    // startup connection
                    SetupConnection(device);
                }
                else
                {
                    var doc = _devices[id] = new AtemDevice(new AtemDeviceInfo(id, "", DateTime.MinValue, address, port, new List <string>()))
                    {
                        Remember = true, // Remember anything created manually
                        Enabled  = true, // Enable for connections
                    };

                    _dbDevices.Upsert(id, doc);

                    // startup connection
                    SetupConnection(doc);
                }

                return(Tuple.Create(true, ListDevices()));
            }
        }
Ejemplo n.º 3
0
        private void SetupConnection(AtemDevice device)
        {
            if (device.Enabled && device.Client == null)
            {
                device.Client = new AtemClientExt(device.Info.Id(), new AtemClient(device.Info.Address, false),
                                                  _context, _transfers, device.Subscriptions);
                device.Client.OnChange += sender =>
                {
                    if (sender is AtemClientExt client)
                    {
                        _context.Clients.All.SendAsync("devices", ListDevices());
                        Console.WriteLine($"Device state change {device?.Info?.Name ?? "-"} = {client.Connected}");
                    }
                };

                device.Client.Client.Connect();
            }
            else if (!device.Enabled && device.Client != null)
            {
                device.Client.Client.Dispose();
                device.Client.SendState(null);
                device.Client = null;
            }
        }