Exemplo n.º 1
0
        /// <summary>
        /// Cria um novo processo com Id unico e como coordenador se não existir nenhum processo
        /// </summary>
        private IProcedure CreateProcedure()
        {
            long identifier = ActiveProcedures.GetNewIdentifier(0);
            bool isManager  = ActiveProcedures.Count < 1;

            return(new Procedure(_log, identifier, isManager));
        }
Exemplo n.º 2
0
        private void CreateProcedureStart() =>
        startProcess(ADD, ProcessType.CreateProcedure, () =>
        {
            IProcedure newProcedure = CreateProcedure();

            ActiveProcedures.Add(newProcedure);

            _log.processoCriado(newProcedure.Identifier);
        }, false);
Exemplo n.º 3
0
 private void InactivateManagerStart() =>
 startProcess(INACTIVATE_MANAGER, ProcessType.InactivateManager, () =>
 {
     if (ActiveProcedures.Any())
     {
         IProcedure managerProcedure = ActiveProcedures.RetrieveManager();
         if (managerProcedure != null)
         {
             InactivateProcedure(managerProcedure);
         }
     }
 });
Exemplo n.º 4
0
 /// <summary>
 /// Inativa o processo especificado da lista de processo
 /// </summary>
 private void InactivateProcedure(IProcedure procedure)
 {
     ActiveProcedures.Remove(procedure);
     if (procedure.Manager)
     {
         _log.coordenadorInativado(procedure.Identifier);
     }
     else
     {
         _log.processoInativado(procedure.Identifier);
     }
 }
Exemplo n.º 5
0
 private void InactivateProcedureStart() =>
 startProcess(INACTIVATE_PROCEDURE, ProcessType.InactivateProcedure, () =>
 {
     if (ActiveProcedures.Any())
     {
         IProcedure randomProcedure = ActiveProcedures.GetRandomProcedure();
         if (randomProcedure != null)
         {
             InactivateProcedure(randomProcedure);
         }
     }
 });
Exemplo n.º 6
0
        private void ExecuteRequestStart() =>
        startProcess(REQUEST, ProcessType.ExecuteRequest, () =>
        {
            if (ActiveProcedures.Any())
            {
                IProcedure procedure = ActiveProcedures.GetRandomProcedure();
                if (procedure != null)
                {
                    _log.processoFezUmaRequisicao(procedure.Identifier);
                    bool recieved = procedure.SendRequest();

                    if (!recieved)
                    {
                        _log.naoFoiObtidaNenhumaRespostaParaARequisicao();
                        procedure.BeginElection();
                    }
                }
            }
        });