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(); } }
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())); } }
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; } }