Exemplo n.º 1
0
        protected bool UpdateEventCache(Actor actor, RaiseEventRequest raiseEventRequest, out string msg)
        {
            msg = null;
            CustomEvent customEvent;

            switch (raiseEventRequest.Cache)
            {
            case (byte)CacheOperation.DoNotCache: return(true);

            case (byte)CacheOperation.AddToRoomCache:
                customEvent = new CustomEvent(actor.ActorNr, raiseEventRequest.EvCode, raiseEventRequest.Data);
                EventCache.AddEvent(customEvent);
                return(true);

            case (byte)CacheOperation.AddToRoomCacheGlobal:
                customEvent = new CustomEvent(0, raiseEventRequest.EvCode, raiseEventRequest.Data);
                EventCache.AddEvent(customEvent);
                return(true);
            }

            // cache operations for the actor event cache currently only working with hashtable data
            Hashtable eventData;

            if (raiseEventRequest.Data == null || raiseEventRequest.Data is Hashtable)
            {
                eventData = (Hashtable)raiseEventRequest.Data;
            }
            else
            {
                msg = string.Format(
                    "Cache operation '{0}' requires a Hashtable as event data.",
                    raiseEventRequest.Cache);
                return(false);
            }

            switch (raiseEventRequest.Cache)
            {
            case (byte)CacheOperation.MergeCache:
                ActorEventCache.MergeEvent(actor.ActorNr, raiseEventRequest.EvCode, eventData);
                return(true);

            case (byte)CacheOperation.RemoveCache:
                ActorEventCache.RemoveEvent(actor.ActorNr, raiseEventRequest.EvCode);
                return(true);

            case (byte)CacheOperation.ReplaceCache:
                ActorEventCache.ReplaceEvent(actor.ActorNr, raiseEventRequest.EvCode, eventData);
                return(true);

            default:
                msg = string.Format("Unknown cache operation '{0}'.", raiseEventRequest.Cache);
                return(false);
            }
        }
        public void RemoveEvent(string testCase)
        {
            var eventCache = new EventCacheDictionary();

            var eventData = new Hashtable {
                { 1, 1 }
            };
            string msg;

            Assert.That(eventCache.MergeEvent(1, 1, eventData, out msg));

            if (testCase == "UseMerge")
            {
                Assert.That(eventCache.MergeEvent(1, 1, null, out msg), Is.True);
            }
            else
            {
                Assert.That(eventCache.RemoveEvent(1, 1), Is.True);
            }
        }
        public void ActorsEventCacheCachedEventsTotalLimitTests()
        {
            var eventCache = new EventCacheDictionary();

            const int ChchedEventsCountLimit = 2;

            eventCache.CachedEventsCountLimit = ChchedEventsCountLimit;

            string msg;

            Assert.That(eventCache.MergeEvent(1, 1, new Hashtable(), out msg));
            Assert.That(eventCache.MergeEvent(2, 1, new Hashtable(), out msg));

            Assert.That(eventCache.MergeEvent(3, 1, new Hashtable(), out msg), Is.True);
            Assert.That(eventCache.IsTotalLimitExceeded, Is.True);

            eventCache.RemoveEvent(1, 1);
            Assert.That(eventCache.IsTotalLimitExceeded, Is.False);

            Assert.That(eventCache.MergeEvent(2, 2, new Hashtable(), out msg));
            Assert.That(eventCache.IsTotalLimitExceeded, Is.True);
        }