示例#1
0
        private async void Notify(ConnectionEndpoint endpoint, NetworkEvent networkEvent)
        {
            lock (this)
            {
                pendingCount++;

                if (pendingCount == 1)
                {
                    Trace("Queue started");
                    syncPendingSent = new SyncEvent();
                }
            }

            await Task.Delay(Parameters.CallLatency);

            endpoint.Notify(networkEvent);

            lock (this)
            {
                pendingCount--;

                if (pendingCount == 0)
                {
                    Trace("Queue empty");
                    syncPendingSent.SetComplete();
                }
            }
        }
示例#2
0
        public async void Import()
        {
            //BIP 39
            var sentence = string.Join(" ", faucet.mnemonic);

            (byte[] publicKey, byte[] privateKey) = CryptoServices.ImportBIP39(sentence, faucet.email, faucet.password);

            var keypair = new KeyPair
                          (
                new PublicKey(publicKey),
                new PrivateKey(privateKey, PIN)
                          );

            // Import Identity
            var identity = Engine.FindIdentity(keypair.PublicID);

            if (identity == null)
            {
                identity = await Engine.ImportIdentity(
                    IdentityType.Light.Stereotype,
                    Name,
                    keypair);
            }

            identity.Unlock(PIN);

            Main.CurrentIdentity = (IdentityVM)identity;

            WhenComplete.SetComplete();

            // Activate
            await Engine.ActivateIdentity(identity, faucet.secret, faucet.ModelAmount);
        }
示例#3
0
        public void Update(TaskProgress progress)
        {
            Trace($"Update progress: {progress}");

            Task.Progress = progress;

            switch (progress)
            {
            case TaskProgress.Acknowledged:

                WhenAcknowledged.SetComplete();

                break;

            case TaskProgress.Confirmed:

                WhenAcknowledged.SetComplete();

                WhenCompleted.SetComplete();

                break;

            case TaskProgress.Timeout:

                WhenAcknowledged.Timeout();

                WhenCompleted.Timeout();

                break;

            case TaskProgress.Failed:

                WhenAcknowledged.Fail();

                WhenCompleted.Fail();

                break;

            case TaskProgress.Cancelled:

                WhenAcknowledged.SetComplete();

                WhenCompleted.Cancel();

                break;
            }
        }
示例#4
0
        public Task <SigningResult> Approve(bool isApproved)
        {
            IsApproved = isApproved;

            taskUser.SetComplete(isApproved);

            return(taskSign.WhenComplete);
        }
示例#5
0
        public async Task <bool?> Backup(string identityID, byte[] backupData)
        {
            var sync = new SyncEvent();

            var mailController = new MFMailComposeViewController();

            mailController.SetSubject(Localizer.Translate("BackupFor") + " " + identityID);
            mailController.SetMessageBody(Localizer.Translate("BackupMailBody"), false);

            var nsData = NSData.FromArray(backupData);

            mailController.AddAttachmentData(nsData, "application/json", $"{identityID}.blue");

            mailController.Finished += (object s, MFComposeResultEventArgs args) => {
                switch (args.Result)
                {
                case MFMailComposeResult.Saved:
                case MFMailComposeResult.Sent:
                    sync.SetComplete();
                    break;

                default:
                    sync.SetComplete(false);
                    break;
                }

                args.Controller.DismissViewController(true, null);
            };

            UIApplication
            .SharedApplication
            .KeyWindow
            .RootViewController
            .PresentViewController(mailController, true, null);

            return(await sync.WhenComplete);
        }
示例#6
0
        public async Task Start()
        {
            Trace($"Start");

            // Parallel: Load Identities and connect to Service
            await Task.WhenAll(
                InitializeProviders(),
                ConnectToService());

            // Connected now, get info about identities
            Task initialization = InitializeIdentities();
            Task timeout        = Task.Delay(IdentitiesInitializedTimeout);

            var first = await Task.WhenAny(
                initialization,
                timeout
                );

            // Notify
            Trace($"Initialized");
            Initialized?.Invoke(first == initialization);
            WhenInitialized.SetComplete();
        }
示例#7
0
 public NotificationHub(SimulationParameters parameters) : base(parameters)
 {
     // start with all messages sent
     syncPendingSent = new SyncEvent();
     syncPendingSent.SetComplete();
 }
示例#8
0
 internal void Close(SigningResult result)
 {
     Result = result;
     taskSign.SetComplete(result);
 }
示例#9
0
        private void EndInitialize()
        {
            isInitializing = false;

            WhenInitialized.SetComplete();
        }