//---------------------------------------------- public IAgentSynchronisation GetAgent() { IAgentSynchronisation agent = Activator.CreateInstance(m_typeAgent) as IAgentSynchronisation; agent.Init(m_strParametresAgentSynchro); return(agent); }
public CResultAErreur DoOperations(int nIdSession) { CResultAErreur result = CResultAErreur.True; List <IOperationSynchronisation> lstOperationsAFaire = null; lock (this) { if (m_bTraitementEnCours) { return(result); } m_bTraitementEnCours = true; lstOperationsAFaire = m_listeOperations; //Copie les opérations connues m_listeOperations = new List <IOperationSynchronisation>(); //Vide les opérations à faire m_lastDateSynchro = DateTime.Now; } try { if (lstOperationsAFaire == null || lstOperationsAFaire.Count == 0) { return(result); } //Stocke les agents Dictionary <string, IAgentSynchronisation> dicAgents = new Dictionary <string, IAgentSynchronisation>(); foreach (IOperationSynchronisation operation in lstOperationsAFaire.ToArray()) { IAgentSynchronisation agent = operation.GetAgent(); result = agent.DoOperation(operation, nIdSession); if (result) { lstOperationsAFaire.RemoveAt(0); } else { result.EmpileErreur("Sync error"); return(result); } } } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); } finally { if (!result) //Si echec, remet en tête les opérations qui n'ont pas abouti { lock (this) { m_listeOperations.InsertRange(0, lstOperationsAFaire); } } m_bTraitementEnCours = false; } return(result); }