/// <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)); }
private void CreateProcedureStart() => startProcess(ADD, ProcessType.CreateProcedure, () => { IProcedure newProcedure = CreateProcedure(); ActiveProcedures.Add(newProcedure); _log.processoCriado(newProcedure.Identifier); }, false);
private void InactivateManagerStart() => startProcess(INACTIVATE_MANAGER, ProcessType.InactivateManager, () => { if (ActiveProcedures.Any()) { IProcedure managerProcedure = ActiveProcedures.RetrieveManager(); if (managerProcedure != null) { InactivateProcedure(managerProcedure); } } });
/// <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); } }
private void InactivateProcedureStart() => startProcess(INACTIVATE_PROCEDURE, ProcessType.InactivateProcedure, () => { if (ActiveProcedures.Any()) { IProcedure randomProcedure = ActiveProcedures.GetRandomProcedure(); if (randomProcedure != null) { InactivateProcedure(randomProcedure); } } });
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(); } } } });