public CacheService AddCache <TCache>() where TCache : ICache
        {
            TCache cacheInstance = (TCache)Activator.CreateInstance(typeof(TCache));

            caches.Add(cacheInstance);
            return(this);
        }
Beispiel #2
0
        private Tenant GetTenantBasedOnUrl(string urlHost)
        {
            if (String.IsNullOrEmpty(urlHost))
            {
                throw new ApplicationException("urlHost must be specified");
            }
            Tenant tenant;

            string cacheName           = "all-tentnts-cache-name";
            int    cacheTimeOutSeconds = 30;

            List <Tenant> tenants =
                new TCache <List <Tenant> >().Get(
                    cacheName, cacheTimeOutSeconds,
                    () =>
            {
                List <Tenant> tenants1;
                using (var context = new MultiTenantContext())
                {
                    tenants1 = context.Tenant.ToList();
                }
                return(tenants1);
            });

            tenant = tenants.FirstOrDefault(a => a.DomainName.ToLower().Equals(urlHost)) ??
                     tenants.FirstOrDefault(a => a.Default);

            if (tenant == null)
            {
                throw new ApplicationException("tenant not found based on URL, no default found");
            }

            return(tenant);
        }
    public static TCache Create <TCache>()
        where TCache : ICache, new()
    {
        var result = new TCache();

        cacheList.Add(result);
        return(result);
    }
Beispiel #4
0
        internal TCache GetValuesCache <TCache>() where TCache : ITempoMapValuesCache, new()
        {
            var result = _valuesCaches.OfType <TCache>().FirstOrDefault();

            if (result == null)
            {
                _valuesCaches.Add(result = new TCache());
                result.Invalidate(this);
            }

            return(result);
        }
        public ActionResult Index()
        {
            var speakersAll =
                new TCache <List <Speaker> >().
                Get("s-cache", 20,
                    () =>
            {
                List <Speaker> speakersAll1 = _context.
                                              Speakers.
                                              Include(a => a.Sessions.Select(b => b.Tenant)).
                                              ToList();

                return(speakersAll1);
            });


            var speakers = new List <Speaker>();

            // ReSharper disable once LoopCanBeConvertedToQuery
            foreach (var speaker in speakersAll)
            {
                if (speaker.Sessions != null)
                {
                    var speakerInTenant =
                        speaker.Sessions.
                        Any(a => a.Tenant.Name == Tenant.Name);
                    if (speakerInTenant)
                    {
                        speakers.Add(new Speaker
                        {
                            FirstName = speaker.FirstName,
                            LastName  = speaker.LastName,
                            Id        = speaker.Id,
                            PictureId = speaker.PictureId,
                            Bio       = speaker.Bio,
                            AllowHtml = speaker.AllowHtml,
                            WebSite   = speaker.WebSite,

                            ImageUrl =
                                $"/Content/Images/Speakers/Speaker-{speaker.PictureId}-75.jpg",
                            Sessions =
                                speaker.Sessions.
                                Where(a => a.Tenant.Name == Tenant.Name).
                                OrderBy(a => a.Title).ToList()
                        });
                    }
                }
                else
                {
                }
            }
            return(View("Index", "_Layout", speakers));
        }
Beispiel #6
0
        public async Task <ActionResult> Index()
        {
            Task <List <Speaker> > speakersAll =
                new TCache <Task <List <Speaker> > >().
                Get("s-cache", 20,
                    () =>
            {
                var speakersAll1 = context.Speakers.ToListAsync();
                return(speakersAll1);
            });

            var speakers = new List <Speaker>();

            speakers = new List <Speaker>();
            foreach (var speaker in await speakersAll)
            // The "await" needs to be added where the function would be calling the thing containted within the Task<>.
            // In this case, our foreach is really wanting a List, not a Task.  Our speakersAll is really a Task<List> without the await.
            {
                bool speakerInTenant =
                    speaker.Sessions.
                    Any(a => a.Tenant.Name == Tenant.Name);
                if (speakerInTenant)
                {
                    speakers.Add(new Speaker
                    {
                        FirstName = speaker.FirstName,
                        LastName  = speaker.LastName,
                        Id        = speaker.Id,
                        PictureId = speaker.Id,
                        Bio       = speaker.Bio,
                        AllowHtml = speaker.AllowHtml,
                        WebSite   = speaker.WebSite,
                        ImageUrl  =
                            $"/Content/Images/Speakers/Speaker-{speaker.PictureId}-75.jpg",
                        Sessions =
                            speaker.Sessions.
                            Where(a => a.Tenant.Name == Tenant.Name).
                            OrderBy(a => a.Title).ToList()
                    });
                }
            }
            return(View("Index", "_Layout", speakers));
        }
 ConcurrentDictionary <string, Dict> GetVectDict(LangLabel lang)
 {
     lock (VectCacheLock)
     {
         if (_vectCache == null)
         {
             _vectCache = new TCache();
         }
         if (_vectCache.ContainsKey(lang))
         {
             if (_vectCache[lang].TryGetTarget(out ConcurrentDictionary <string, Dict> dict))
             {
                 return(dict);
             }
         }
         var new_dict = new ConcurrentDictionary <string, Dict>();
         _vectCache[lang] = new WeakReference <ConcurrentDictionary <string, Dict> >(new_dict);
         return(new_dict);
     }
 }
        public async Task <ActionResult> Index()
        {
            var speakers = new List <Speaker>();

            //var speakersAll = await context.Speakers.ToListAsync();

            Task <List <Speaker> > speakersAll = new TCache <Task <List <Speaker> > >().Get("s-cache", 20, () =>
            {
                var speakersAll1 = context.Speakers.ToListAsync();
                return(speakersAll1);
            });

            foreach (var speaker in await speakersAll)
            {
                bool speakerInTenant = speaker.Sessions.Any(a => a.Tenant.Name == Tenant.Name);

                if (speakerInTenant)
                {
                    speakers.Add(new Speaker
                    {
                        FirstName = speaker.FirstName,
                        LastName  = speaker.LastName,
                        Id        = speaker.Id,
                        Bio       = speaker.Bio,
                        Website   = speaker.Website,
                        AllowHtml = speaker.AllowHtml,
                        PictureId = speaker.PictureId,
                        ImageUrl  = $"/Content/Images/Speakers/Speaker-{speaker.PictureId}-75.jpg",

                        Sessions =
                            speaker.Sessions
                            .Where(a => a.Tenant.Name == Tenant.Name)
                            .OrderBy(a => a.Title).ToList()
                    });
                }
            }


            return(View("Index", "_Layout", speakers));
        }
Beispiel #9
0
        public static object GetLock(string key, TimeSpan refreshInterval, TimeSpan slidingExpiration, bool persistToFile, CacheItemPriority priority, TCache.CacheLoaderDelegate cacheLoader)
        {
            lock (_ReadLockbox) // could use Instance.SyncRoot for all access
            {
                CacheEntry entry;

                if (ContainsCacheEntry(key))
                {
                    entry = Instance[key];
                    entry.LastUse = DateTime.Now;
                }
                else
                {
                    // escalate to a writer lock for this operation
                    lock (_WriteLockbox) // could use Instance.SyncRoot for all access
                    {
                        entry = new CacheEntry();
                        entry.CacheLoader = cacheLoader;
                        entry.RefreshInterval = refreshInterval;
                        entry.SlidingExpiration = slidingExpiration;
                        entry.CacheItemPriority = priority;
                        entry.LastUse = DateTime.Now;
                        entry.PersistToFile = persistToFile;

                        if (persistToFile)
                        {
                            string filename = key;
                            foreach (char c in Path.GetInvalidFileNameChars())
                            {
                                filename = filename.Replace( c.ToString(), "^_^" );
                            }
                            filename += ".bin";
                            if (filename.Length > 255) throw new ApplicationException("Can't use persist to key name is greater than 255.");

                            string basePath = null;
                            System.Web.HttpContext context = System.Web.HttpContext.Current;
                            if (context == null)
                                basePath = AppDomain.CurrentDomain.BaseDirectory;
                            else
                                basePath = context.Server.MapPath("~/");

                            basePath = Path.Combine(basePath, "LocalCache");

                            if (Directory.Exists(basePath) == false) Directory.CreateDirectory(basePath);

                            entry.PersistedFilename = Path.Combine(basePath, filename);
                        }

                        Instance.Add(key, entry);
                    }
                }

                return entry.Locker;
            }
        }
        // GET: rest/Speaker/extjswrapper or rest/Speaker
        public HttpResponseMessage Get(bool extJsWrapper = false)
        {
            var speakersAll =
                new TCache <List <Speaker> >().
                Get("s-cache", 20,
                    () =>
            {
                var speakersAll1 =
                    _context.Speakers.
                    Include(a => a.Sessions.Select(b => b.Tenant)).
                    ToList();
                return(speakersAll1);
            });

            //var badCnt = TestForBad(speakersAll);


            var speakers = new List <Speaker>();

            // ReSharper disable once LoopCanBeConvertedToQuery
            foreach (var speaker in speakersAll)
            {
                var speakerInTenant =
                    speaker.Sessions.
                    Any(a => a.Tenant.Name == Tenant.Name);
                if (speakerInTenant)
                {
                    speakers.Add(new Speaker
                    {
                        FirstName = speaker.FirstName,
                        LastName  = speaker.LastName,
                        //Id = speaker.Id,
                        Id        = speaker.PictureId,
                        PictureId = speaker.PictureId,
                        Bio       = speaker.Bio,
                        AllowHtml = speaker.AllowHtml,
                        WebSite   = speaker.WebSite,

                        ImageUrl =
                            $"/Content/Images/Speakers/Speaker-{speaker.PictureId}-75.jpg",
                        Sessions =
                            speaker.Sessions.
                            Where(a => a.Tenant.Name == Tenant.Name).
                            OrderBy(a => a.Title).ToList()
                    });
                }
            }

            var speakers2 = speakers.Select(speaker => new Speaker
            {
                Id        = speaker.Id,
                FirstName = speaker.FirstName,
                LastName  = speaker.LastName,
                WebSite   = speaker.WebSite,
                ImageUrl  = "",
                Bio       = speaker.Bio,
                AllowHtml = speaker.AllowHtml,

                Sessions = speaker.Sessions.Select(session => new Session()
                {
                    Id    = session.Id,
                    Title = session.Title,
                    //SessionUrl = "",
                    DescriptionShort = session.DescriptionShort,
                    Description      = session.Description
                                       //TenantName = session.Tenant.Name
                }).ToList()
            }).ToList();

            if (extJsWrapper)
            {
                return(Request.CreateResponse(HttpStatusCode.OK,
                                              new
                {
                    data = speakers2,
                    total = speakers2.ToList().Count,
                    success = true
                }));
            }
            else
            {
                return(Request.CreateResponse(HttpStatusCode.OK,
                                              speakers2));
            }
        }
Beispiel #11
0
        private static void Test()
        {
            //create instance
            TCache cache = new TCache("c001"); //or cache = TCache.Nodes("c001");

            //add & get cache
            cache["item01"] = "Hello world";
            string v1 = (string)cache["item01"];

            Console.WriteLine(v1);

            cache["item02"] = "abc";
            cache["item03"] = DateTime.Now;
            cache["item04"] = 3.14159;

            Console.WriteLine(cache["item02"]);
            Console.WriteLine(cache["item03"]);
            Console.WriteLine(cache["item04"]);

            //add cache items with values
            cache.Add("item10", "Foo");
            cache.Add("item11", "Bar", DateTime.Now); //specify item's time property
            cache.Add("item13", "Test text", TCache.NoItemTime);

            string v2 = (string)cache.Get("item11");
            string v3 = (string)cache.Get("item11", DateTime.Now.AddSeconds(-3)); //check the item time if modified since the specify time

            try
            {
                //the follow line will raise CacheItemNotModifyException
                string v4 = (string)cache.Get("item11", DateTime.Now.AddSeconds(3));
                Console.WriteLine("ERROR");
            }
            catch (CacheItemNotModifiedException ex)
            {
                Console.WriteLine("test specify time... PASS, actually time:{0}", ex.LastModifyTime);
            }

            try
            {
                //the follow line will raise CacheItemNotFoundException
                object v5 = cache.Get("item999");
                Console.WriteLine("ERROR");
            }
            catch (CacheItemNotFoundException)
            {
                Console.WriteLine("test specify key that does not exis ... PASS");
            }

            //get cache item detail infomation
            TCacheItem item = cache.GetItem("item11");

            Console.WriteLine("Key:{0} value:{1} item time:{2}",
                              item.Key, item.Value, item.ItemTime);

            //multi get
            TCacheItem[] items = cache.MultiGet(new string[] { "item10", "item11", "item12", "item13" });
            foreach (TCacheItem ci in items)
            {
                Console.WriteLine("Key:{0} value:{1}", ci.Key, ci.Value, ci.ItemTime);
            }

            //remove
            cache.Remove("item11");
            try
            {
                //the follow line will raise CacheItemNotFoundException
                string v6 = (string)cache.Get("item11");
                Console.WriteLine("ERROR");
            }
            catch (CacheItemNotFoundException)
            {
                Console.WriteLine("test remove item... PASS");
            }

            //---------------- Non-persistance test ------------------

            TCacheNP.Add("item10", "Foo");
            TCacheNP.Add("item11", "Bar");
            TCacheNP.Add("item12", "This will expired in 2 seconds", new TimeSpan(0, 0, 2));
            TCacheNP.Add("item13", 123456);

            System.Threading.Thread.Sleep(3000);

            string np1 = (string)TCacheNP.Get("item10");
            string np2 = (string)TCacheNP.Get("item11");
            string np3 = (string)TCacheNP.Get("item12"); //this should be NULL
            int    np4 = (int)TCacheNP.Get("item13");

            if (np3 == null)
            {
                Console.WriteLine("non-persistance expired ok");
            }

            //multi get
            TCacheItem[] npitems = TCacheNP.MultiGet(new string[] { "item10", "item11", "item12", "item13" });
            foreach (TCacheItem ci in npitems)
            {
                Console.WriteLine("Key:{0} value:{1}", ci.Key, ci.Value);
            }

            //object test
            Member m = new Member()
            {
                Id = 789, Name = "Jacky"
            };

            TCacheNP.Add("item20", m);

            Member m2 = (Member)TCacheNP.Get("item20");

            Console.WriteLine("Object test ok, id:{0} name:{1}", m2.Id, m2.Name);

            Console.WriteLine("DEMO END");
            Console.ReadLine();
        }
Beispiel #12
0
        private static void Test()
        {
            //create instance
            TCache cache = new TCache("tcd001"); //or cache = TCache.Nodes("c001");

            //add & get cache
            cache["item01"] = "Hello world";
            string v1 = (string)cache["item01"];

            Console.WriteLine(v1);

            cache["item02"] = "abc";
            cache["item03"] = DateTime.Now;
            cache["item04"] = 3.14159;

            Console.WriteLine(cache["item02"]);
            Console.WriteLine(cache["item03"]);
            Console.WriteLine(cache["item04"]);

            //add cache items with values
            cache.Add("item10", "Foo");
            cache.Add("item11", "Bar", DateTime.Now); //specify item's time property
            cache.Add("item13", "Test text", TCache.NoItemTime);

            string v2 = (string)cache.Get("item11");
            string v3 = (string)cache.Get("item11", DateTime.Now.AddSeconds(-3)); //check the item time if modified since the specify time

            try
            {
                //the follow line will raise CacheItemNotModifyException
                string v4 = (string)cache.Get("item11", DateTime.Now.AddSeconds(3));
                Console.WriteLine("ERROR");
            }
            catch (CacheItemNotModifiedException ex)
            {
                Console.WriteLine("test specify time... PASS, actually time:{0}", ex.LastModifyTime);
            }

            try
            {
                //the follow line will raise CacheItemNotFoundException
                object v5 = cache.Get("item999");
                Console.WriteLine("ERROR");
            }
            catch (CacheItemNotFoundException)
            {
                Console.WriteLine("test specify key that does not exis ... PASS");
            }

            //get cache item detail infomation
            TCacheItem item = cache.GetItem("item11");

            Console.WriteLine("Key:{0} value:{1} item time:{2}",
                              item.Key, item.Value, item.ItemTime);

            //multi get
            TCacheItem[] items = cache.MultiGet(new string[] { "item10", "item11", "item12", "item13" });
            foreach (TCacheItem ci in items)
            {
                Console.WriteLine("Key:{0} value:{1}", ci.Key, ci.Value, ci.ItemTime);
            }

            //remove
            cache.Remove("item11");
            try
            {
                //the follow line will raise CacheItemNotFoundException
                string v6 = (string)cache.Get("item11");
                Console.WriteLine("ERROR");
            }
            catch (CacheItemNotFoundException)
            {
                Console.WriteLine("test remove item... PASS");
            }

            Console.WriteLine("DEMO END");
            Console.ReadLine();
        }