Example #1
0
        //----------------------------------------------
        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);
        }