private void ScheduleAfterHostStarted(RHostStartupInfo startupInfo) { var afterHostStartedEvaluationSource = new RSessionEvaluationSource(CancellationToken.None); _pendingEvaluationSources.Post(afterHostStartedEvaluationSource); Interlocked.Exchange(ref _afterHostStartedTask, AfterHostStarted(afterHostStartedEvaluationSource, startupInfo)); }
private void ScheduleAfterHostStarted(RHostStartupInfo startupInfo) { var afterHostStartedEvaluationSource = new RSessionEvaluationSource(CancellationToken.None); _pendingEvaluationSources.Post(afterHostStartedEvaluationSource); AfterHostStarted(afterHostStartedEvaluationSource, startupInfo).DoNotWait(); }
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(); } } }
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); }
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) { } } } }
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); } }
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); } } }
private void ScheduleAfterHostStarted(RHostStartupInfo startupInfo) { var afterHostStartedEvaluationSource = new RSessionEvaluationSource(true, CancellationToken.None); _pendingEvaluationSources.Post(afterHostStartedEvaluationSource); AfterHostStarted(afterHostStartedEvaluationSource, startupInfo).DoNotWait(); }
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; }