/// <summary>
 /// Event handler for removing a device when pipe device disconnected.
 /// </summary>
 /// <param name="arg">arg.RemoteConnectionPubSub - key to find pipe device in the dictionary.</param>
 /// <returns></returns>
 Task OnRemoteDeviceDisconnected(RemoteDeviceDisconnectedMessage arg)
 {
     RemotePipeDevicesDictionary.TryGetValue(arg.RemoteConnectionPubSub, out IPipeDevice pipeDevice);
     if (pipeDevice != null)
     {
         _deviceManager.Remove(pipeDevice);
     }
     return(Task.CompletedTask);
 }
        async Task WorkflowCleanup(string errorMessage, string mac, IDevice device, bool workflowFinishedSuccessfully, bool deleteVaultBond)
        {
            // Cleanup
            try
            {
                await _ui.HidePinUi();

                if (!string.IsNullOrEmpty(errorMessage))
                {
                    if (device != null && !string.IsNullOrWhiteSpace(device.SerialNo))
                    {
                        var sb = new StringBuilder();
                        sb.Append(errorMessage);
                        sb.Append(Environment.NewLine);
                        sb.Append(Environment.NewLine);
                        sb.Append(string.Format(TranslationSource.Instance["ConnectionFlow.VaultSerialNo"], device.SerialNo));

                        errorMessage = sb.ToString();
                    }

                    WriteLine(errorMessage);
                    await _ui.SendError(errorMessage, mac);
                }

                if (device != null)
                {
                    if (workflowFinishedSuccessfully)
                    {
                        WriteLine($"Successfully finished the main workflow: ({device.Id})");
                        DeviceFinishedMainFlow?.Invoke(this, device);
                    }
                    else if (deleteVaultBond)
                    {
                        WriteLine($"Mainworkflow critical error, Removing ({device.Id})");
                        await _deviceManager.Remove(device);
                    }
                    else
                    {
                        WriteLine($"Main workflow failed, Disconnecting ({device.Id})");
                        await _deviceManager.DisconnectDevice(device);
                    }
                }
            }
            catch (Exception ex)
            {
                WriteLine(ex, LogErrorSeverity.Error);
            }
        }
        public async Task WaitVaultInitialization(string mac, IDevice device, CancellationToken ct)
        {
            ct.ThrowIfCancellationRequested();

            await _ui.SendNotification(TranslationSource.Instance["ConnectionFlow.Initialization.WaitingInitializationMessage"], mac);

            if (!await device.WaitInitialization(SdkConfig.DeviceInitializationTimeout, ct))
            {
                throw new WorkflowException(TranslationSource.Instance.Format("ConnectionFlow.Initialization.InitializationFailed", mac));
            }

            if (device.IsErrorState)
            {
                await _deviceManager.Remove(device);

                throw new WorkflowException(TranslationSource.Instance.Format("ConnectionFlow.Initialization.DeviceInitializationError", mac, device.ErrorMessage));
            }
        }
Ejemplo n.º 4
0
 async Task OnDeviceWipedEvent(DeviceWipedEvent arg)
 {
     await _deviceManager.Remove(arg.DeviceViewModel.Device);
 }