Beispiel #1
0
        private void ScheduleAfterHostStarted(RHostStartupInfo startupInfo)
        {
            var afterHostStartedEvaluationSource = new RSessionEvaluationSource(CancellationToken.None);

            _pendingEvaluationSources.Post(afterHostStartedEvaluationSource);
            Interlocked.Exchange(ref _afterHostStartedTask, AfterHostStarted(afterHostStartedEvaluationSource, startupInfo));
        }
Beispiel #2
0
        private void ScheduleAfterHostStarted(RHostStartupInfo startupInfo)
        {
            var afterHostStartedEvaluationSource = new RSessionEvaluationSource(CancellationToken.None);

            _pendingEvaluationSources.Post(afterHostStartedEvaluationSource);
            AfterHostStarted(afterHostStartedEvaluationSource, startupInfo).DoNotWait();
        }
Beispiel #3
0
        private async Task AfterHostStarted(RSessionEvaluationSource evaluationSource, RHostStartupInfo startupInfo)
        {
            using (var evaluation = await evaluationSource.Task) {
                // Load RTVS R package before doing anything in R since the calls
                // below calls may depend on functions exposed from the RTVS package
                await LoadRtvsPackage(evaluation);

                if (startupInfo.WorkingDirectory != null)
                {
                    await evaluation.SetWorkingDirectory(startupInfo.WorkingDirectory);
                }
                else
                {
                    await evaluation.SetDefaultWorkingDirectory();
                }

                if (_hostClientApp != null)
                {
                    await evaluation.SetVsGraphicsDevice();

                    string mirrorUrl = _hostClientApp.CranUrlFromName(startupInfo.CranMirrorName);
                    await evaluation.SetVsCranSelection(mirrorUrl);

                    await evaluation.SetVsHelpRedirection();

                    await evaluation.SetChangeDirectoryRedirection();
                }
            }
        }
Beispiel #4
0
        public Task <IRSessionEvaluation> BeginEvaluationAsync(CancellationToken cancellationToken = default(CancellationToken))
        {
            if (!_isHostRunning)
            {
                return(CanceledBeginEvaluationTask);
            }

            var source = new RSessionEvaluationSource(cancellationToken);

            _pendingEvaluationSources.Post(source);

            return(_isHostRunning ? source.Task : CanceledBeginEvaluationTask);
        }
Beispiel #5
0
        private async Task AfterHostStarted(RSessionEvaluationSource evaluationSource, RHostStartupInfo startupInfo)
        {
            using (var evaluation = await evaluationSource.Task) {
                // Load RTVS R package before doing anything in R since the calls
                // below calls may depend on functions exposed from the RTVS package
                var libPath = IsRemote ? "." : Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetAssemblyPath());

                await LoadRtvsPackage(evaluation, libPath);

                if (!IsRemote && startupInfo.WorkingDirectory != null)
                {
                    await evaluation.SetWorkingDirectoryAsync(startupInfo.WorkingDirectory);
                }
                else
                {
                    await evaluation.SetDefaultWorkingDirectoryAsync();
                }

                var callback = _callback;
                if (callback != null)
                {
                    await evaluation.SetVsGraphicsDeviceAsync();

                    string mirrorUrl = callback.CranUrlFromName(startupInfo.CranMirrorName);
                    await evaluation.SetVsCranSelectionAsync(mirrorUrl);

                    await evaluation.SetCodePageAsync(startupInfo.CodePage);

                    await evaluation.SetROptionsAsync();

                    await evaluation.OverrideFunctionAsync("setwd", "base");

                    await evaluation.SetFunctionRedirectionAsync();

                    await evaluation.OptionsSetWidthAsync(startupInfo.TerminalWidth);

                    try {
                        // Only enable autosave for this session after querying the user about any existing file.
                        // This way, if they happen to disconnect while still querying, we don't save the new empty
                        // session and overwrite the old file.
                        bool deleteExisting = await evaluation.QueryReloadAutosaveAsync();

                        await evaluation.EnableAutosaveAsync(deleteExisting);
                    } catch (REvaluationException) {
                    }
                }
            }
        }
Beispiel #6
0
        private async Task AfterHostStarted(RSessionEvaluationSource evaluationSource, RHostStartupInfo startupInfo)
        {
            try {
                using (var evaluation = await evaluationSource.Task) {
                    // Load RTVS R package before doing anything in R since the calls
                    // below calls may depend on functions exposed from the RTVS package
                    await LoadRtvsPackage(evaluation);

                    if (startupInfo.WorkingDirectory != null)
                    {
                        await evaluation.SetWorkingDirectoryAsync(startupInfo.WorkingDirectory);
                    }
                    else
                    {
                        await evaluation.SetDefaultWorkingDirectoryAsync();
                    }

                    var callback = _callback;
                    if (callback != null)
                    {
                        await evaluation.SetVsGraphicsDeviceAsync();

                        string mirrorUrl = callback.CranUrlFromName(startupInfo.CranMirrorName);
                        await evaluation.SetVsCranSelectionAsync(mirrorUrl);

                        await evaluation.SetCodePageAsync(startupInfo.CodePage);

                        await evaluation.SetROptionsAsync();

                        await evaluation.OverrideFunctionAsync("setwd", "base");

                        await evaluation.SetFunctionRedirectionAsync();

                        await evaluation.OptionsSetWidthAsync(startupInfo.TerminalWidth);
                    }

                    _afterHostStartedTcs.SetResult(null);
                }
            } catch (OperationCanceledException oce) {
                _afterHostStartedTcs.TrySetCanceled(oce.CancellationToken);
            } catch (Exception ex) {
                _afterHostStartedTcs.TrySetException(ex);
            }
        }
Beispiel #7
0
        private async Task AfterHostStarted(RSessionEvaluationSource evaluationSource, RHostStartupInfo startupInfo)
        {
            using (var evaluation = await evaluationSource.Task) {
                // Load RTVS R package before doing anything in R since the calls
                // below calls may depend on functions exposed from the RTVS package
                var libPath = BrokerConnector.IsRemote
                    ? "."
                    : Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetAssemblyPath());

                await LoadRtvsPackage(evaluation, libPath);

                if (!IsRemote && startupInfo.WorkingDirectory != null)
                {
                    await evaluation.SetWorkingDirectoryAsync(startupInfo.WorkingDirectory);
                }
                else
                {
                    await evaluation.SetDefaultWorkingDirectoryAsync();
                }

                var callback = _callback;
                if (callback != null)
                {
                    await evaluation.SetVsGraphicsDeviceAsync();

                    string mirrorUrl = callback.CranUrlFromName(startupInfo.CranMirrorName);
                    await evaluation.SetVsCranSelectionAsync(mirrorUrl);

                    await evaluation.SetCodePageAsync(startupInfo.CodePage);

                    await evaluation.SetROptionsAsync();

                    await evaluation.OverrideFunctionAsync("setwd", "base");

                    await evaluation.SetFunctionRedirectionAsync();

                    await evaluation.OptionsSetWidthAsync(startupInfo.TerminalWidth);
                }
            }
        }
Beispiel #8
0
        private async Task AfterHostStarted(RSessionEvaluationSource evaluationSource, RHostStartupInfo startupInfo) {
            using (var evaluation = await evaluationSource.Task) {
                // Load RTVS R package before doing anything in R since the calls
                // below calls may depend on functions exposed from the RTVS package
                await LoadRtvsPackage(evaluation);
                if (startupInfo.WorkingDirectory != null) {
                    await evaluation.SetWorkingDirectory(startupInfo.WorkingDirectory);
                } else {
                    await evaluation.SetDefaultWorkingDirectory();
                }

                if (_hostClientApp != null) {
                    await evaluation.SetVsGraphicsDevice();

                    string mirrorUrl = _hostClientApp.CranUrlFromName(startupInfo.CranMirrorName);
                    await evaluation.SetVsCranSelection(mirrorUrl);

                    await evaluation.SetVsHelpRedirection();
                    await evaluation.SetChangeDirectoryRedirection();
                }
            }
        }
Beispiel #9
0
 private void ScheduleAfterHostStarted(RHostStartupInfo startupInfo) {
     var afterHostStartedEvaluationSource = new RSessionEvaluationSource(true, CancellationToken.None);
     _pendingEvaluationSources.Post(afterHostStartedEvaluationSource);
     AfterHostStarted(afterHostStartedEvaluationSource, startupInfo).DoNotWait();
 }
Beispiel #10
0
        public Task<IRSessionEvaluation> BeginEvaluationAsync(bool isMutating = true, CancellationToken cancellationToken = default(CancellationToken)) {
            if (!_isHostRunning) {
                return CanceledEvaluationTask;
            }

            var source = new RSessionEvaluationSource(isMutating, cancellationToken);
            _pendingEvaluationSources.Post(source);

            return _isHostRunning ? source.Task : CanceledEvaluationTask;
        }