//-------------------------------------------------------------------- public static CSynchroniseurBaseDistante GetSynchroniseur(int nIdSession) { CSynchroniseurBaseDistante synchro = null; if (!m_dicSessionToSynchroniseur.TryGetValue(nIdSession, out synchro)) { synchro = new CSynchroniseurBaseDistante(nIdSession); m_dicSessionToSynchroniseur[nIdSession] = synchro; } return(synchro); }
//---------------------------------------------------------------------- /// <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); }
//---------------------------------------------- public CResultAErreur CommitTrans() { lock (this) { //Récupère le synchroniseur le plus récent CSynchroniseurBaseDistante synchroniseur = m_stackSynchroniseurs.Pop(); if (m_stackSynchroniseurs.Count > 0) { //Copie les données du synchroniseur dans le prochain (transactions imbriquées) return(m_stackSynchroniseurs.Peek().IntegreOperations(synchroniseur)); } else { CSynchroniseurBaseDistante synchro = CSynchroniseurBaseDistante.GetSynchroniseur(m_nIdSession); CResultAErreur result = synchro.IntegreOperations(synchroniseur); if (!result) { return(result); } result = synchro.TraiteAll(); return(result); } } }