Example #1
0
        private async void DevicePoller_DeviceDisconnected(object sender, DeviceEventArgs e)
        {
            try
            {
                await _Lock.WaitAsync().ConfigureAwait(false);

                var trezorManager = TrezorManagers.FirstOrDefault(t => ReferenceEquals(t.Device, e.Device));

                if (trezorManager == null)
                {
                    return;
                }

                TrezorDisconnected?.Invoke(this, new TrezorManagerConnectionEventArgs <TMessageType>(trezorManager));

                trezorManager.Dispose();

                var tempList = new List <T>(TrezorManagers);

                _ = tempList.Remove(trezorManager);

                TrezorManagers = new ReadOnlyCollection <T>(tempList);
            }
            finally
            {
                _ = _Lock.Release();
            }
        }
Example #2
0
        private async void DevicePoller_DeviceInitialized(object sender, DeviceEventArgs e)
        {
            try
            {
                await _Lock.WaitAsync().ConfigureAwait(false);

                var trezorManager = TrezorManagers.FirstOrDefault(t => ReferenceEquals(t.Device, e.Device));

                if (trezorManager != null)
                {
                    return;
                }

                trezorManager = CreateTrezorManager(e.Device);

                var tempList = new List <T>(TrezorManagers)
                {
                    trezorManager
                };

                TrezorManagers = new ReadOnlyCollection <T>(tempList);

                await trezorManager.InitializeAsync().ConfigureAwait(false);

                if (_FirstTrezorTaskCompletionSource.Task.Status == TaskStatus.WaitingForActivation)
                {
                    _FirstTrezorTaskCompletionSource.SetResult(trezorManager);
                }

                TrezorInitialized?.Invoke(this, new TrezorManagerConnectionEventArgs <TMessageType>(trezorManager));
            }
            finally
            {
                _ = _Lock.Release();
            }
        }