//-------------------------------------------------------------------- /// <summary> /// Id session est null si on ne gère pas de transaction /// </summary> /// <param name="nIdSession"></param> /// <param name="strCleBaseDistante"></param> /// <param name="operation"></param> public void AddOperation( int?nIdSession, string strCleBaseDistante, IOperationSynchronisation operation) { lock (this) { if (nIdSession != null) { CTransactionSynchroniseur trans = CGestionnaireTransactionsSynchroniseur.GetInstance().GetServiceTransaction(nIdSession.Value) as CTransactionSynchroniseur; if (trans != null && trans.IsInTrans()) { trans.AddOperation(strCleBaseDistante, operation); return; } } CDonneesSynchronisationBaseDistante donnee = null; if (!m_dicDonneesSynchro.TryGetValue(strCleBaseDistante, out donnee)) { donnee = new CDonneesSynchronisationBaseDistante(strCleBaseDistante); m_dicDonneesSynchro[strCleBaseDistante] = donnee; } donnee.AddOperation(operation); } }
//-------------------------------------------------------------------- public CResultAErreur TraiteNextDestination() { CResultAErreur result = CResultAErreur.True; CDonneesSynchronisationBaseDistante donneeSyncRetenue = null; lock (this) { DateTime?dtMin = null; foreach (KeyValuePair <string, CDonneesSynchronisationBaseDistante> kv in m_dicDonneesSynchro) { if (kv.Value.Operations.Count() > 0) { if (dtMin == null || (kv.Value.LastDateSynchro != null && kv.Value.LastDateSynchro < dtMin)) { donneeSyncRetenue = kv.Value; dtMin = kv.Value.LastDateSynchro; } } } } if (donneeSyncRetenue != null) { result = donneeSyncRetenue.DoOperations(m_nIdSession); } return(result); }
//-------------------------------------------------------------------- public CResultAErreur TraiteAgent(string strCleAgent) { CResultAErreur result = CResultAErreur.True; CDonneesSynchronisationBaseDistante donnee = null; if (m_dicDonneesSynchro.TryGetValue(strCleAgent, out donnee)) { return(donnee.DoOperations(m_nIdSession)); } return(result); }
internal CResultAErreur IntegreOperations(CDonneesSynchronisationBaseDistante donnee) { lock (this) { foreach (IOperationSynchronisation operation in donnee.m_listeOperations) { m_listeOperations.Add(operation); } } return(CResultAErreur.True); }
//---------------------------------------------------------------------- /// <summary> /// Intègre les opérations d'un synchroniseur /// </summary> /// <param name="synchroniseur"></param> /// <returns></returns> internal CResultAErreur IntegreOperations(CSynchroniseurBaseDistante synchroniseur) { CResultAErreur result = CResultAErreur.True; foreach (KeyValuePair <string, CDonneesSynchronisationBaseDistante> kv in synchroniseur.m_dicDonneesSynchro) { CDonneesSynchronisationBaseDistante donneeDeMoi = null; if (!m_dicDonneesSynchro.TryGetValue(kv.Key, out donneeDeMoi)) { donneeDeMoi = new CDonneesSynchronisationBaseDistante(kv.Value.CleDestination); m_dicDonneesSynchro[kv.Key] = donneeDeMoi; } result = donneeDeMoi.IntegreOperations(kv.Value); if (!result) { return(result); } } return(result); }