public async Task Sync() { List <IOfflineKeeper> SyncList = Keepers.Where(k => k.IsSynced == false).ToList(); int attemptsLeftCount = 5; while (SyncList.Any() && attemptsLeftCount > 0) { bool hasSyncedAnything = false; foreach (var keeper in SyncList) { string masterTable = await keeper.IsDependentOn(); if (masterTable == null) { hasSyncedAnything = true; await keeper.Sync(); SyncList.Remove(keeper); } else { //check if masterTable isSynced, if yes, we can sync var master = SyncList.Where(l => l.TableName == masterTable).FirstOrDefault(); if (master == null) { if (master.IsSynced) { hasSyncedAnything = true; await keeper.Sync(); SyncList.Remove(keeper); } } } } //so we don't go into dead loop if (!hasSyncedAnything) { attemptsLeftCount--; } } }
public static Keeper Instance(Keepers TypeKeeper) { switch (TypeKeeper) { //every Kepers to be havent branch this switch case Keepers.Reg: if (reg == null) { reg = new RegKeeper(); } //Singleton reg return(reg); case Keepers.Log: if (log == null) { log = new LogKeeper(); } //Singleton log return(log); default: return(null); } ; }
public void AddKeeper(Keeper keeper) { Keepers.Add(keeper.Email, keeper); }