private void StartProcess(StartProcessArguments args) { var process = ProcessManager.CreateNewProcess(args); process.OutputRead += WorkerSendOutput; process.OnExit += WorkerProcessExit; process.StartReadingOutput(); }
public ProcessInstance CreateNewProcess(StartProcessArguments args) { string path = ApplicationsManager.GetApplicationExecutablePath(args.ApplicationName); FileInfo executableFile = new FileInfo(path); ProcessInstance newProcess = ProcessInstanceFactory.CreateAndStartProcess(executableFile); newProcess.Name = args.ApplicationName; newProcess.User = args.UserName; newProcess.SessionId = args.SessionId; ProcessInstances[newProcess.SessionId] = newProcess; ProcessAdded(newProcess); return(newProcess); }
public async Task ClientJoinSession(long sessionId) { await HubOperation(nameof(ClientJoinSession), sessionId, async() => { ProcessSession session = sessionManager.GetSession(sessionId); var user = userManager.GetUserById(Context.User.GetUserId()); await Groups.AddToGroupAsync(Context.ConnectionId, session.GroupName); _ = Clients.Group(session.GroupName).SendAsync("AddSystemMessage", $"Użytkownik {user.DisplayName} dołączył do sesji."); if (session.State == SessionState.NotStarted) { _ = Clients.Group(session.GroupName).SendAsync("AddSystemMessage", "Rozpoczynanie procesu zdalnego."); WorkerConnection worker = workerManager.GetAvaliableWorker(session.App.Name); StartProcessArguments args = new StartProcessArguments() { UserName = user.Email, SessionId = session.Id, ApplicationName = session.App.Name, UserId = user.Id, }; dynamic workerSignalR = GetWorkerContext(worker); await workerSignalR.StartProcess(args); session.State = SessionState.Active; session.WorkerConnection = worker; session.WorkerConnectionId = worker.Id; sessionManager.Update(session); } else { await Clients.Client(session.WorkerConnection.ConnectionId).SendAsync("GetProcessOutput", new GetProcessOutputArguments() { SessionId = sessionId, ConnectionId = Context.ConnectionId, }); } }); }