Ejemplo n.º 1
0
        private void StartProcess(StartProcessArguments args)
        {
            var process = ProcessManager.CreateNewProcess(args);

            process.OutputRead += WorkerSendOutput;
            process.OnExit     += WorkerProcessExit;
            process.StartReadingOutput();
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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,
                    });
                }
            });
        }