Ejemplo n.º 1
0
        private async Task <Entity> GetCacheEntity(Nuid entity_id)
        {
            try
            {
                IRedisDatabase db          = GetCache(entity_id);
                ITransaction   query_trans = db.Database.CreateTransaction();

                string type = await GetCacheType(entity_id);

                EntityTransaction trans = new EntityTransaction(entity_id, type);


                EntityPrefab entity_prefab = Prefabs.GetEntity(trans.Type);
                if (entity_prefab == null)
                {
                    throw new Exception($"Prefabs.GetEntity cant found {trans.Type}");
                }

                string field_key = CacheUtils.BuildFields(trans.Id);
                trans.Fields = query_trans.HashGetAllAsync(field_key);

                foreach (Table table in trans.Entity.GetTables())
                {
                    TablePrefab        table_prefab = entity_prefab.tables[table.GetName()];
                    string             table_key    = CacheUtils.BuildTable(trans.Id, table.GetName());
                    Task <HashEntry[]> key_values   = query_trans.HashGetAllAsync(table_key);
                    trans.AddTableTrans(table.GetName(), key_values);
                }

                bool redis_execute = await query_trans.ExecuteAsync();

                if (!redis_execute)
                {
                    throw new Exception("query_trans ExecuteAsync ERROR!!");
                }

                return(await BuildCacheEntity(trans));
            }
            catch (Exception ex)
            {
                _Logger.LogError(ex, "GetCacheEntities Failed");
            }

            return(null);
        }
Ejemplo n.º 2
0
        private async Task <IReadOnlyList <Entity> > GetCacheEntities()
        {
            Nuid           id          = Nuid.New(Identity, Identity);
            IRedisDatabase db          = GetCache(id);
            string         entites_key = CacheUtils.BuildEntities(id);

            List <Entity>            sorts        = new List <Entity>();
            List <EntityTransaction> entity_trans = new List <EntityTransaction>();

            try
            {
                HashEntry[] entities = await db.Database.HashGetAllAsync(entites_key);

                foreach (HashEntry member in entities)
                {
                    long   child_id = long.Parse(member.Name);
                    string type     = member.Value;

                    Nuid entity_id = Nuid.New(child_id, Identity);

                    EntityTransaction trans = new EntityTransaction(entity_id, type);
                    if (trans.Entity == null)
                    {
                        continue;
                    }

                    entity_trans.Add(trans);
                }

                ITransaction query_trans = db.Database.CreateTransaction();
                foreach (EntityTransaction trans in entity_trans)
                {
                    EntityPrefab entity_prefab = Prefabs.GetEntity(trans.Type);
                    if (entity_prefab == null)
                    {
                        throw new Exception($"Prefabs.GetEntity cant found {trans.Type}");
                    }

                    string field_key = CacheUtils.BuildFields(trans.Id);
                    trans.Fields = query_trans.HashGetAllAsync(field_key);

                    foreach (Table table in trans.Entity.GetTables())
                    {
                        TablePrefab        table_prefab = entity_prefab.tables[table.GetName()];
                        string             table_key    = CacheUtils.BuildTable(trans.Id, table.GetName());
                        Task <HashEntry[]> key_values   = query_trans.HashGetAllAsync(table_key);
                        trans.AddTableTrans(table.GetName(), key_values);
                    }
                }

                bool redis_execute = await query_trans.ExecuteAsync();

                if (!redis_execute)
                {
                    throw new Exception("query_trans ExecuteAsync ERROR!!");
                }

                foreach (EntityTransaction trans in entity_trans)
                {
                    Entity entity = await BuildCacheEntity(trans);

                    sorts.Add(entity);
                }
            }
            catch (Exception ex)
            {
                _Logger.LogError(ex, "GetCacheEntities Failed");
            }

            entity_trans.Clear();

            sorts.Sort((x, y) =>
            {
                EntityPrefab entity_x = Prefabs.GetEntity(x.Type);
                EntityPrefab entity_y = Prefabs.GetEntity(y.Type);

                return(entity_y.priority - entity_x.priority);
            });

            return(sorts);
        }