示例#1
0
        // Only call from InitializeAgentConnectionAsync
        async Task DoInitalizeAgentConnectionAsync()
        {
            try {
                ResetAgentConnection();

                using (ViewControllers.Messages.PushMessage(
                           Message.CreateInfoStatus(
                               Catalog.GetString("Connecting to agent…"), showSpinner: true)))
                    await ConnectToAgentAsync(CancellationToken);

                using (ViewControllers.Messages.PushMessage(
                           Message.CreateInfoStatus(
                               Catalog.GetString("Preparing workspace…"), showSpinner: true))) {
                    await InitializeCompilationWorkspaceAsync(CancellationToken);

                    if (EvaluationService == null)
                    {
                        var evaluationService = new EvaluationService(
                            CompilationWorkspace,
                            new EvaluationEnvironment(WorkingDirectory));
                        evaluationService.NotifyAgentConnected(Agent);
                        EvaluationService = evaluationService;
                    }

                    if (SessionKind == ClientSessionKind.Workbook)
                    {
                        PackageManager = new PackageManagerService(
                            CompilationWorkspace.Configuration.DependencyResolver,
                            EvaluationService,
                            async(refreshForAgentIntegration, cancellationToken) => {
                            if (refreshForAgentIntegration)
                            {
                                await RefreshForAgentIntegration();
                            }
                            return(Agent);
                        });
                    }
                    else
                    {
                        PackageManager = null;
                    }
                }
            } catch (Exception e) {
                Log.Error(TAG, e);
                ViewControllers.Messages.PushMessage(WithReconnectSessionAction(e
                                                                                .ToAlertMessage(Catalog.GetString("Unable to connect"))));

                return;
            }

            try {
                using (ViewControllers.Messages.PushMessage(
                           Message.CreateInfoStatus(
                               Catalog.GetString("Restoring packages…"), showSpinner: true)))
                    await PackageManager?.InitializeAsync(
                        WorkbookApp.Sdk,
                        Workbook
                        .Pages
                        .SelectMany(page => page.Packages),
                        CancellationToken);
            } catch (Exception e) {
                Log.Error(TAG, e);
                ViewControllers.Messages.PushMessage(e
                                                     .ToAlertMessage(Catalog.GetString("Unable to restore packages")));
            }
        }