/// <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)); } }
async Task OnDeviceWipedEvent(DeviceWipedEvent arg) { await _deviceManager.Remove(arg.DeviceViewModel.Device); }