Exemplo n.º 1
0
        public void Notify(Guid idSession, int idOperation, string[] outputs)
        {
            lock (lockUpdateStatus)
            {
                OperationStatus operationSt = sessionStatus[idSession].operationStatus[idOperation];
                if (outputs != null)
                {
                    SessionUtilities.OperationCompleted(operationSt, outputs);
                    ComputationGraph session = sessionDictionary[idSession];
                    SessionUtilities.UpdateMnemonicValues(sessionStatus[idSession].mnemonicsTable,
                                                          session.Operations[idOperation].Output,
                                                          outputs);
                    GetLogSession(idSession);

                    if (!SessionUtilities.SessionCompleted(sessionStatus[idSession].operationStatus))
                    {
                        List <int> idAvailableOperation = SessionUtilities.GetIDAvailableOperation(
                            sessionStatus[idSession].operationStatus,
                            sessionDictionary[idSession].Dependecies);
                        OperationsToExecute(idSession, idAvailableOperation);
                    }
                    else
                    {
                        StopSession(idSession);
                    }
                }
                else
                {
                    SessionUtilities.OperationFaild(operationSt);
                    StopSession(idSession);
                }
            }
        }
Exemplo n.º 2
0
        public void StopSession(Guid id)
        {
            ComputationGraph session = sessionDictionary[id];
            SessionStatus    status  = sessionStatus[id];

            if (SessionUtilities.SessionCompleted(status.operationStatus))
            {
                Console.WriteLine("Session COMPLITED");
                return;
                //сессия закончена - всё ОК
            }
            else
            if (SessionUtilities.SessionFaild(status.operationStatus))
            {
                foreach (OperationStatus operation in status.operationStatus.Where(op => op.status == StatusEnum.Awaits))
                {
                    operation.status = StatusEnum.Aborted;
                }
                Console.WriteLine("Session FAILD");
                //одна операция сломалась значит другие отменяем
                //в целом сессия Faild
            }
            else
            {
                foreach (OperationStatus operation in status.operationStatus.Where(op => op.status == StatusEnum.Awaits))
                {
                    operation.status = StatusEnum.Aborted;
                }
                Console.WriteLine("Session Aborted");
                //сессия была отменена пользователем
                //в целом сессия Aborted
            }
        }