Ejemplo n.º 1
0
        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--;
                }
            }
        }
Ejemplo n.º 2
0
        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);
            }
            ;
        }
Ejemplo n.º 3
0
 public void AddKeeper(Keeper keeper)
 {
     Keepers.Add(keeper.Email, keeper);
 }