private IEnumerable<Interpreter> GetInterpreters() { if (_options.AutoDetect) { _logger.LogTrace(Resources.Trace_AutoDetectingR); var engines = new RInstallation().GetCompatibleEngines(); if (engines.Any()) { foreach (var e in engines) { var detected = new Interpreter(this, Guid.NewGuid().ToString(), e.Name, e.InstallPath, e.BinPath, e.Version); _logger.LogTrace(Resources.Trace_DetectedR, detected.Version, detected.Path); yield return detected; } } else { _logger.LogWarning(Resources.Error_NoRInterpreters); } } foreach (var kv in _options.Interpreters) { string id = kv.Key; InterpreterOptions options = kv.Value; if (!string.IsNullOrEmpty(options.BasePath) && _fs.DirectoryExists(options.BasePath)) { var interpInfo = new RInterpreterInfo(string.Empty, options.BasePath); if (interpInfo.VerifyInstallation()) { yield return new Interpreter(this, id, options.Name, interpInfo.InstallPath, interpInfo.BinPath, interpInfo.Version); continue; } } _logger.LogError(Resources.Error_FailedRInstallationData, id, options.BasePath); } }
internal Session(SessionManager manager, IIdentity user, string id, Interpreter interpreter, string commandLineArguments, ILogger sessionLogger, ILogger messageLogger) { Manager = manager; Interpreter = interpreter; User = user; Id = id; CommandLineArguments = commandLineArguments; _sessionLogger = sessionLogger; _pipe = new MessagePipe(messageLogger); }
public Session CreateSession(IIdentity user, string id, Interpreter interpreter, SecureString password, string profilePath, string commandLineArguments) { Session session; lock (_sessions) { if (_blockedUsers.Contains(user.Name)) { throw new InvalidOperationException(Resources.Error_BlockedByProfileDeletion.FormatInvariant(user.Name)); } var oldUserSessions = GetOrCreateSessionList(user); var oldSessions = oldUserSessions.Where(s => s.Id == id).ToArray(); foreach (var oldSession in oldSessions) { oldUserSessions.Remove(oldSession); Task.Run(() => oldSession.KillHost()).SilenceException<Exception>().DoNotWait(); oldSession.State = SessionState.Terminated; } var userSessions = GetOrCreateSessionList(user); session = new Session(this, user, id, interpreter, commandLineArguments, _sessionLogger, _messageLogger); session.StateChanged += Session_StateChanged; userSessions.Add(session); } session.StartHost( password, profilePath, _loggingOptions.LogHostOutput ? _hostOutputLogger : null, _loggingOptions.LogPackets || _loggingOptions.LogHostOutput ? LogVerbosity.Traffic : LogVerbosity.Minimal); return session; }