Ejemplo n.º 1
0
            public async Task MakeUpdate(ulong ServerLastUpCode)
            {
                if (Table.UpdateAble.UpdateCode > ServerLastUpCode)
                {
                    Table.UpdateAble.Clear();
                    if (IsPartOfTable)
                    {
                        ParentTable.UpdateAble.Clear();
                    }
                }
                while (StartPos <= EndPos)
                {
                    await FindLastTrue();

                    StartPos++;
                    if (StartPos >= ServerItemsCount)
                    {
                        break;
                    }
                    else
                    {
                        var NextUpCode = await GetUpdateCodeAtPos(StartPos);

                        DeleteExtraItems(NextUpCode);
                        if (StartPos >= Table.UpdateAble.UpdateCodes.Length)
                        {
                            break;
                        }
                        var MyUpCode = Table.UpdateAble.UpdateCodes[StartPos];
                        if (MyUpCode.UpdateCode > NextUpCode)
                        {
                            await UpdateFromPosToUpCode(StartPos, MyUpCode.UpdateCode);
                        }
                    }
                }
                if (StartPos < ServerItemsCount)
                {
                    await UpdateFromPosToEnd(StartPos);
                }
                else
                {
                    DeleteItemsFrom(ServerItemsCount);
                }

                if (IsPartOfTable)
                {
                    foreach (var Delete in ShouldDelete)
                    {
                        if (await IsExistAtParent(Delete))
                        {
                            PartTable.Ignore(Delete);
                        }
                        else
                        {
                            PartTable.Delete(Delete);
                        }
                    }
                }
                else
                {
                    foreach (var Delete in ShouldDelete)
                    {
                        Table.Delete(Delete);
                    }
                }

                Table.UpdateAble.UpdateCode.Save(ServerLastUpCode);

                if (IsPartOfTable)
                {
                    PartTable.SaveToParent();
                }
#if DEBUG_UpdateAble
                await Debuger();
#endif
            }