Exemplo n.º 1
0
        // ============= Internal Threads =================

        void InternalUpdate()
        {
            List <EndPoint> toRemove = new List <EndPoint>();

            while (state == State.Bound)
            {
                toRemove.Clear();
                foreach (Connection conn in Connections.Values())
                {
                    if (conn.LastSeen.AddSeconds(MaxTimeout) < DateTime.Now)
                    {
                        Send(conn.Conn, SignatureMessage.disconnectSigMes);
                        OnDisconnect?.Invoke(conn);
                        toRemove.Add(conn.Conn);
                    }
                }

                for (int i = 0; i < toRemove.Count; ++i)
                {
                    Connections.Remove(toRemove[i]);
                }

                Thread.Sleep(1000);
#if SLEEPY_STATS
                stats.Flush();
#endif
            }
        }
 /// <summary>
 /// Register the specified binding.
 /// </summary>
 /// <param name="binding">Binding.</param>
 internal void Register(BindingKey bindingKey)
 {
     if (!bindingKey.IsMember && !bindingKey.IsImplicit)
     {
         implicitTypeLookup.Remove(bindingKey);
         AddImplicitTypes(bindingKey, GetImplicitTypes(bindingKey));
     }
 }
Exemplo n.º 3
0
        internal void Rollback(int ID)
        {
            _log.Debug("ROLLBACK");
            // rollback all views with tran id
            foreach (var v in _views)
            {
                v.Value.RollBack(ID);
            }

            _transactions.Remove(ID);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 移出道具
        /// </summary>
        /// <param name="item"></param>
        public bool RemoveSubItem(long lItemSlot)
        {
            if (lItemSlot > this.MaxSlot || lItemSlot < this.MinSlot)
            {
                return(false);
            }

            T itemT = FindSubItemAtSlot(lItemSlot);

            if (itemT == null)
            {
                return(false);
            }

            if (m_BaseItemContainerState != null)
            {
                if (m_BaseItemContainerState.OnRemovingSubItem(itemT, this) == true)
                {
                    return(false);
                }
            }

            m_ToteSubItems.Remove(lItemSlot);
            itemT.SlotId = BaseItem.SlotNotSet;
            m_BaseItemContainerState.IsUpdateRemoveSubItemCall = true;

            if (m_BaseItemContainerState != null)
            {
                m_BaseItemContainerState.OnRemovedSubItem(itemT, this);
            }

            return(true);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 移出道具
        /// </summary>
        /// <param name="item"></param>
        public bool RemoveMailBox(long iMailBoxSerial)
        {
            T mailBoxT = FindMailBoxOnSerial(iMailBoxSerial);

            if (mailBoxT == null)
            {
                return(false);
            }

            EventHandler <BeforeRemoveMailBoxCallEventArgs <T, V> > tempBeforeEventArgs = m_ThreadEventBeforeRemoveMailBoxCall;

            if (tempBeforeEventArgs != null)
            {
                BeforeRemoveMailBoxCallEventArgs <T, V> eventArgs = new BeforeRemoveMailBoxCallEventArgs <T, V>(mailBoxT, this);
                tempBeforeEventArgs(this, eventArgs);

                if (eventArgs.IsCancel == true)
                {
                    return(false);
                }
            }

            m_MailBoxs.Remove(iMailBoxSerial);

            EventHandler <AfterRemoveMailBoxCallEventArgs <T, V> > tempAfterEventArgs = m_ThreadEventAfterRemoveMailBoxCall;

            if (tempAfterEventArgs != null)
            {
                AfterRemoveMailBoxCallEventArgs <T, V> eventArgs = new AfterRemoveMailBoxCallEventArgs <T, V>(mailBoxT, this);
                tempAfterEventArgs(this, eventArgs);
            }

            return(true);
        }
Exemplo n.º 6
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public bool RemoveSpell(long lSpellSerial)
        {
            T spellT = FindSpellOnSerial(lSpellSerial);

            if (spellT == null)
            {
                return(false);
            }

            EventHandler <BeforeRemoveSpellCallEventArgs <T> > tempBeforeEventArgs = m_ThreadEventBeforeRemoveSpellCall;

            if (tempBeforeEventArgs != null)
            {
                BeforeRemoveSpellCallEventArgs <T> eventArgs = new BeforeRemoveSpellCallEventArgs <T>(spellT, this);
                tempBeforeEventArgs(this, eventArgs);

                if (eventArgs.IsCancel == true)
                {
                    return(false);
                }
            }

            m_Spells.Remove(lSpellSerial);

            EventHandler <AfterRemoveSpellCallEventArgs <T> > tempAfterEventArgs = m_ThreadEventAfterRemoveSpellCall;

            if (tempAfterEventArgs != null)
            {
                AfterRemoveSpellCallEventArgs <T> eventArgs = new AfterRemoveSpellCallEventArgs <T>(spellT, this);
                tempAfterEventArgs(this, eventArgs);
            }

            return(true);
        }
Exemplo n.º 7
0
        public bool Complete(T req, bool isError)
        {
            if (loadingGroupRes.ContainsKey(req))
            {
                loadingGroupRes.Remove(req);
                RemoveProgress(req);
                loadedCount++;
                if (m_OnComplete != null)
                {
                    m_OnComplete(req, isError);
                }
                else
                {
                    OnComplete(req, isError);
                }
                DispatchOnProgress();
            }
            // Debug.LogFormat("i={0},totalCount={1},loadedCount={2},IsDown={3},req={4},isErr={5}",i,totalCount,loadedCount,IsDown,req,isError);
            if (IsDown)
            {
                DispatchOnComplete();
            }

            return(true);
            // return i >= 0;
        }
Exemplo n.º 8
0
        private IResolver BindExplicit <BType, CType>(BindingKey bindingKey, IBindingConfig bindingConfig)
            where BType : class
            where CType : class, BType
        {
            lock (syncLock) {
                IResolver oldResolver;
                if (allResolvers.TryGetValue(bindingKey, out oldResolver))
                {
                    if (bindingKey.IsImplicit)
                    {
                        // Handle edge case where 2 thread auto-register same implicit
                        // binding via 'ResolveBinding'. More complex to add guard within
                        // ResolveBinding() than here.
                        return(oldResolver);
                    }
                    allResolvers.Remove(bindingKey);
                }

                // Add after create resolver
                var resolver = CreateResolverInstance <BType, CType> (bindingKey, bindingConfig);

                // Register Implicits
                implicitBindingResolver.Register(bindingKey);

                return(resolver);
            }
        }
Exemplo n.º 9
0
        public static string GetIp(string host)
        {
            string ip      = string.Empty;
            bool   refresh = false;

            System.DateTime time = System.DateTime.Now;
            if (cacheTime.TryGetValue(host, out time))
            {
                double dt = (System.DateTime.Now - time).TotalSeconds;
                if (dt >= DnsCacheTimeOutSecond)  // dns cache time out
                {
                    refresh = true;
                }
                else if (cacheDns.TryGetValue(host, out ip) && string.IsNullOrEmpty(ip) && dt >= DnsRequestTimeOutSecond)      //dns request time out
                {
                    refresh = true;
                }
                if (refresh)
                {
                    cacheDns.Remove(host);
                }
            }

            if (!cacheDns.TryGetValue(host, out ip))
            {
                cacheDns[host] = string.Empty; //标记为已经开始加载
                Debug.LogFormat("http dns {0}", host);
                RequestHttpDnsIP(host);
                cacheTime[host] = System.DateTime.Now;
            }

            return(ip);
        }
Exemplo n.º 10
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public bool RemoveAura(long lAuraSerial)
        {
            T auraT = FindAuraOnSerial(lAuraSerial);

            if (auraT == null)
            {
                return(false);
            }

            EventHandler <BeforeRemoveAuraCallEventArgs <T> > tempBeforeEventArgs = m_ThreadEventBeforeRemoveAuraCall;

            if (tempBeforeEventArgs != null)
            {
                BeforeRemoveAuraCallEventArgs <T> eventArgs = new BeforeRemoveAuraCallEventArgs <T>(auraT, this);
                tempBeforeEventArgs(this, eventArgs);

                if (eventArgs.IsCancel == true)
                {
                    return(false);
                }
            }

            m_Auras.Remove(lAuraSerial);

            EventHandler <AfterRemoveAuraCallEventArgs <T> > tempAfterEventArgs = m_ThreadEventAfterRemoveAuraCall;

            if (tempAfterEventArgs != null)
            {
                AfterRemoveAuraCallEventArgs <T> eventArgs = new AfterRemoveAuraCallEventArgs <T>(auraT, this);
                tempAfterEventArgs(this, eventArgs);
            }

            return(true);
        }
Exemplo n.º 11
0
        /// <summary>
        /// 在好友的集合内删除某好友
        /// </summary>
        /// <param name="iMapID"></param>
        public bool RemoveGroup(Serial creatureSerial)
        {
            if (base.Deleted == true)
            {
                return(false);
            }

            BaseCreature baseCreature = FindGroupOnSerial(creatureSerial);

            if (baseCreature == null)
            {
                return(false);
            }

            if (m_BaseCreatureState != null)
            {
                if (m_BaseCreatureState.OnRemovingGroup(baseCreature, this) == true)
                {
                    return(false);
                }
            }

            m_BaseCreaturesGroup.Remove(creatureSerial);
            m_BaseCreatureState.IsRemoveGroupCall = true;

            if (m_BaseCreatureState != null)
            {
                m_BaseCreatureState.OnRemovedGroup(baseCreature, this);
            }

            return(true);
        }
Exemplo n.º 12
0
 public void RemoveSubBot(SubBot subBot, Bot bot)
 {
     lock (subBots)
     {
         subBots.Remove(subBot.ToString());
     }
 }
Exemplo n.º 13
0
        /// <summary>
        /// 移出道具
        /// </summary>
        /// <param name="item"></param>
        public bool RemoveItem(Serial itemSerial)
        {
            if (base.Deleted == true)
            {
                return(false);
            }

            BaseItem item = FindItemOnSerial(itemSerial);

            if (item == null)
            {
                return(false);
            }

            if (m_BaseCreatureState != null)
            {
                if (m_BaseCreatureState.OnRemovingItem(item, this) == true)
                {
                    return(false);
                }
            }

            m_ToteItems.Remove(itemSerial);
            m_BaseCreatureState.IsRemoveItemCall = true;

            if (m_BaseCreatureState != null)
            {
                m_BaseCreatureState.OnRemovedItem(item, this);
            }

            return(true);
        }
Exemplo n.º 14
0
        /// <summary>
        /// 在好友的集合内删除某好友
        /// </summary>
        /// <param name="iCreatureSerial"></param>
        public bool RemoveFriend(Serial creatureSerial)
        {
            if (base.Deleted == true)
            {
                return(false);
            }

            BaseCreature baseCreature = FindFriendOnSerial(creatureSerial);

            if (baseCreature == null)
            {
                return(false);
            }

            if (m_BaseCreatureState != null)
            {
                if (m_BaseCreatureState.OnRemovingFriend(baseCreature, this) == true)
                {
                    return(false);
                }
            }

            m_BaseCreaturesFriend.Remove(creatureSerial);
            m_BaseCreatureState.IsRemoveFriendCall = true;

            if (m_BaseCreatureState != null)
            {
                m_BaseCreatureState.OnRemovedFriend(baseCreature, this);
            }

            return(true);
        }
Exemplo n.º 15
0
 public void RemoveFile(string path)
 {
     if (filesMod.ContainsKey(path))
     {
         filesMod.Remove(path);
     }
 }
Exemplo n.º 16
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="baseMobile"></param>
        public void OnLeave(BaseCharacter character)
        {
            if (m_MapSpaceNodeState != null)
            {
                m_MapSpaceNodeState.OnLeavingMapSpaceNode(character, this);
            }

            m_Players.Remove(character);

            if (this.PlayersCount == 0 && m_SpaceNodeState != SpaceNodeState.Deactivate)
            {
                // 如果游戏玩家的列表是空的话,则无效区域点,说明此区域点玩家不存在
                m_LockSpaceNodeState.Enter();
                {
                    if (this.PlayersCount == 0 && m_SpaceNodeState != SpaceNodeState.Deactivate)
                    {
                        m_SpaceNodeState = SpaceNodeState.Deactivate;
                        this.OnDeactivate();
                    }
                }
                m_LockSpaceNodeState.Exit();
            }

            if (m_MapSpaceNodeState != null)
            {
                m_MapSpaceNodeState.OnLeavedMapSpaceNode(character, this);
            }
        }
Exemplo n.º 17
0
        /// <summary>
        /// 移出道具
        /// </summary>
        /// <param name="item"></param>
        public bool RemoveGuildMember(long iGuildMemberSerial)
        {
            T guildMemberT = FindGuildMemberOnSerial(iGuildMemberSerial);

            if (guildMemberT == null)
            {
                return(false);
            }

            EventHandler <BeforeRemoveGuildMemberCallEventArgs <T> > tempBeforeEventArgs = m_ThreadEventBeforeRemoveGuildMemberCall;

            if (tempBeforeEventArgs != null)
            {
                BeforeRemoveGuildMemberCallEventArgs <T> eventArgs = new BeforeRemoveGuildMemberCallEventArgs <T>(guildMemberT, this);
                tempBeforeEventArgs(this, eventArgs);

                if (eventArgs.IsCancel == true)
                {
                    return(false);
                }
            }

            m_GuildMembers.Remove(iGuildMemberSerial);

            EventHandler <AfterRemoveGuildMemberCallEventArgs <T> > tempAfterEventArgs = m_ThreadEventAfterRemoveGuildMemberCall;

            if (tempAfterEventArgs != null)
            {
                AfterRemoveGuildMemberCallEventArgs <T> eventArgs = new AfterRemoveGuildMemberCallEventArgs <T>(guildMemberT, this);
                tempAfterEventArgs(this, eventArgs);
            }

            return(true);
        }
Exemplo n.º 18
0
        /// <summary>
        /// 移出道具
        /// </summary>
        /// <param name="item"></param>
        public bool RemoveMailMessage(long lMailMessageId)
        {
            T mailMessageT = FindMailMessageOnId(lMailMessageId);

            if (mailMessageT == null)
            {
                return(false);
            }

            EventHandler <BeforeRemoveMailMessageCallEventArgs <T> > tempBeforeEventArgs = m_ThreadEventBeforeRemoveMailMessageCall;

            if (tempBeforeEventArgs != null)
            {
                BeforeRemoveMailMessageCallEventArgs <T> eventArgs = new BeforeRemoveMailMessageCallEventArgs <T>(mailMessageT, this);
                tempBeforeEventArgs(this, eventArgs);

                if (eventArgs.IsCancel == true)
                {
                    return(false);
                }
            }

            m_MailMessages.Remove(lMailMessageId);

            EventHandler <AfterRemoveMailMessageCallEventArgs <T> > tempAfterEventArgs = m_ThreadEventAfterRemoveMailMessageCall;

            if (tempAfterEventArgs != null)
            {
                AfterRemoveMailMessageCallEventArgs <T> eventArgs = new AfterRemoveMailMessageCallEventArgs <T>(mailMessageT, this);
                tempAfterEventArgs(this, eventArgs);
            }

            return(true);
        }
Exemplo n.º 19
0
        /// <summary>
        /// 在好友的集合内删除某好友
        /// </summary>
        /// <param name="iMapID"></param>
        public bool RemoveParty(Serial creatureSerial)
        {
            if (base.Deleted == true)
            {
                return(false);
            }

            BaseCreature baseCreature = FindPartyOnSerial(creatureSerial);

            if (baseCreature == null)
            {
                return(false);
            }

            if (m_BaseCreatureState != null)
            {
                if (m_BaseCreatureState.OnRemovingParty(baseCreature, this) == true)
                {
                    return(false);
                }
            }

            m_BaseCreaturesParty.Remove(creatureSerial);
            m_BaseCreatureState.IsRemovePartyCall = true;

            if (m_BaseCreatureState != null)
            {
                m_BaseCreatureState.OnRemovedParty(baseCreature, this);
            }

            return(true);
        }
Exemplo n.º 20
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public bool RemoveTalent(long lTalentSerial)
        {
            T talentT = FindTalentOnSerial(lTalentSerial);

            if (talentT == null)
            {
                return(false);
            }

            EventHandler <BeforeRemoveTalentCallEventArgs <T> > tempBeforeEventArgs = m_ThreadEventBeforeRemoveTalentCall;

            if (tempBeforeEventArgs != null)
            {
                BeforeRemoveTalentCallEventArgs <T> eventArgs = new BeforeRemoveTalentCallEventArgs <T>(talentT, this);
                tempBeforeEventArgs(this, eventArgs);

                if (eventArgs.IsCancel == true)
                {
                    return(false);
                }
            }

            m_Talents.Remove(lTalentSerial);

            EventHandler <AfterRemoveTalentCallEventArgs <T> > tempAfterEventArgs = m_ThreadEventAfterRemoveTalentCall;

            if (tempAfterEventArgs != null)
            {
                AfterRemoveTalentCallEventArgs <T> eventArgs = new AfterRemoveTalentCallEventArgs <T>(talentT, this);
                tempAfterEventArgs(this, eventArgs);
            }

            return(true);
        }
Exemplo n.º 21
0
        /// <summary>
        /// 移除触发器事件
        /// </summary>
        public void RemoveTriggerEvent(long lTriggerEventSerial)
        {
            TriggerEvent triggerEvent = m_TriggerEvents.GetValue(lTriggerEventSerial);

            if (triggerEvent == null)
            {
                return;
            }

            triggerEvent.Serial        = Serial.MinusOne;
            triggerEvent.TriggerSystem = null;

            m_ExclusiveSerial.ReleaseSerial(lTriggerEventSerial);

            m_TriggerEvents.Remove(lTriggerEventSerial);
        }
Exemplo n.º 22
0
        /// <summary>
        /// 移出道具
        /// </summary>
        /// <param name="item"></param>
        public bool RemoveChildItem(long lItemSerial)
        {
            if (base.Deleted == true)
            {
                return(false);
            }

            BaseItem removeChildItem = FindChildItemOnSerial(lItemSerial);

            if (removeChildItem == null)
            {
                return(false);
            }

            if (m_BaseItemState != null)
            {
                if (m_BaseItemState.OnRemovingChildItem(removeChildItem, this) == true)
                {
                    return(false);
                }
            }

            m_ChildItems.Remove(lItemSerial);
            m_BaseItemState.IsUpdateRemoveChildItemCall = true;

            if (m_BaseItemState != null)
            {
                m_BaseItemState.OnRemovedChildItem(removeChildItem, this);
            }

            return(true);
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public bool RemoveReputation(long lReputationSerial)
        {
            T reputationT = FindReputationOnSerial(lReputationSerial);

            if (reputationT == null)
            {
                return(false);
            }

            EventHandler <BeforeRemoveReputationCallEventArgs <T> > tempBeforeEventArgs = m_ThreadEventBeforeRemoveReputationCall;

            if (tempBeforeEventArgs != null)
            {
                BeforeRemoveReputationCallEventArgs <T> eventArgs = new BeforeRemoveReputationCallEventArgs <T>(reputationT, this);
                tempBeforeEventArgs(this, eventArgs);

                if (eventArgs.IsCancel == true)
                {
                    return(false);
                }
            }

            m_Reputations.Remove(lReputationSerial);

            EventHandler <AfterRemoveReputationCallEventArgs <T> > tempAfterEventArgs = m_ThreadEventAfterRemoveReputationCall;

            if (tempAfterEventArgs != null)
            {
                AfterRemoveReputationCallEventArgs <T> eventArgs = new AfterRemoveReputationCallEventArgs <T>(reputationT, this);
                tempAfterEventArgs(this, eventArgs);
            }

            return(true);
        }
Exemplo n.º 24
0
//        public void test()
//        {
//            Views.View v = new Views.View();
//            v.SchemaColumns = new ViewRowDefinition();
//            v.Name = "test";
//            v.FireOnTypes = new List<string>();
//            v.FireOnTypes.Add("BizFX.Entity.Return, BizFX.Entity, Version=2.0.0.0, Culture=neutral, PublicKeyToken=e5d192f5e46064af");
//            v.SchemaColumns.Columns.Add("Name", DataTypes.String);
//            v.SchemaColumns.Columns.Add("BirthDay", DataTypes.DateTime);
//            v.SchemaColumns.Columns.Add("Address", DataTypes.String);
//            v.SchemaColumns.Columns.Add("Code", DataTypes.Int);
//            v.MapFunctionCode = @"
//List<object[]> q = api.Query(""someview"",""a=1"",0, -1);
//foreach(object[] rr in q)
//{
//    testRow r = new testRow(rr);
//    emit(data.GUID, r.Name, r.BirthDay, r.Address, r.Code*2);
//}
//if(data.IsOK)
//    emit(data.GUID, ""ppp"",DateTime.Now,""hello"",123);
//else
//    api.Log(""error"");
//";
//            //v.SchemaColumns = v.Name;
//            //v.ViewsUsed = new List<Views.ViewRowDefinition>();
//            //v.ViewsUsed.Add(v.SchemaColumns);
//            Compile(v,"RaptorDB\\Views\\");
//        }

        #region [  M A P   C O M P I L E R  ]
        public void Compile(Views.ViewBase view, string mapfolder)
        {
            Directory.CreateDirectory(mapfolder);
            CodeDomProvider cs          = CodeDomProvider.CreateProvider("CSharp");
            var             _Parameters = new CompilerParameters();

            // create source file
            string code = CreateSourceFile(view, _Parameters);

            // Compile code
            _Parameters.IncludeDebugInformation = false;
            _Parameters.GenerateExecutable      = false;
            _Parameters.CompilerOptions         = "/optimize";
            _Parameters.OutputAssembly          = mapfolder +
                                                  view.Name +
                                                  //DocID.ToString().Replace("-", "") +
                                                  ".dll";
            var compilerresult = cs.CompileAssemblyFromSource(_Parameters, code);

            if (compilerresult.Errors.HasErrors)
            {
                foreach (var p in compilerresult.Errors)
                {
                    _log.Error(p.ToString());
                }
            }
            else
            {
                _mapcache.Remove(mapfolder + view.Name + ".dll");
            }
        }
Exemplo n.º 25
0
        /// <summary>
        ///Remove 的测试
        ///</summary>
        public void RemoveTestHelper <KeyT, ValueT>()
        {
            SafeDictionary <KeyT, ValueT> target = new SafeDictionary <KeyT, ValueT>(); // TODO: 初始化为适当的值
            KeyT key = default(KeyT);                                                   // TODO: 初始化为适当的值

            target.Remove(key);
            Assert.Inconclusive("无法验证不返回值的方法。");
        }
Exemplo n.º 26
0
 private void EraseValue(Thread thread)
 {
     if (Volatile.Read(ref _disposing) == 1)
     {
         throw new ObjectDisposedException(GetType().FullName);
     }
     _slots.Remove(thread);
 }
Exemplo n.º 27
0
        internal void Commit(int ID)
        {
            tran_data data = null;

            // save data to indexes
            if (_transactions.TryGetValue(ID, out data))
            {
                // delete any items with docid in view
                if (_view.DeleteBeforeInsert)
                {
                    DeleteRowsWith(data.docid);
                }
                SaveAndIndex(data.rows);
            }
            // remove in memory data
            _transactions.Remove(ID);
        }
Exemplo n.º 28
0
            private Resolver <CType> BindExplicit <BType, CType>()
                where BType : class
                where CType : class, BType
            {
                lock (syncLock) {
                    Type bindType = typeof(BType);

                    implicitTypeLookup.Remove(bindType);
                    allResolvers.Remove(bindType);

                    // Add after create resolver
                    var resolver = CreateResolverInstanceGeneric <BType, CType> (false);
                    AddImplicitTypes(bindType, GetImplicitTypes(bindType));

                    ClearDependentResolvers(bindType);

                    return((Resolver <CType>)resolver);
                }
            }
Exemplo n.º 29
0
        internal bool RemovePet(uint PetId)
        {
            isUpdated = false;
            ServerMessage RemoveMessage = new ServerMessage(604);

            RemoveMessage.AppendUInt(PetId);
            GetClient().SendMessage(RemoveMessage);

            InventoryPets.Remove(PetId);
            return(true);
        }
Exemplo n.º 30
0
        /// <summary>
        /// 移除响应触发器的智能体组
        /// </summary>
        public void RemoveTriggerAgents(TriggerAgents triggerAgents)
        {
            if (triggerAgents.TriggerSystem != this)
            {
                Debug.WriteLine("TriggerSystem.AddTriggerAgents(...) - triggerAgents.TriggerSystem != this error!");
                return;
            }

            triggerAgents.TriggerSystem = null;
            m_TriggerAgents.Remove(triggerAgents);
        }
 private void CancelExtracted(bool throwOnFirstException, SafeDictionary<CancellationTokenRegistration, Action> callbacks)
 {
     if (Interlocked.CompareExchange(ref _cancelRequested, 1, 0) == 0)
     {
         _handle.Set();
         UnregisterLinkedTokens();
         List<Exception> exceptions = null;
         try
         {
             int id = _currentId;
             do
             {
                 Action callback;
                 if (callbacks.Remove(new CancellationTokenRegistration(id, this), out callback) && callback != null)
                 {
                     if (throwOnFirstException)
                     {
                         callback();
                     }
                     else
                     {
                         try
                         {
                             callback();
                         }
                         catch (Exception exception)
                         {
                             if (ReferenceEquals(exceptions, null))
                             {
                                 exceptions = new List<Exception>();
                             }
                             exceptions.Add(exception);
                         }
                     }
                 }
             } while (id-- != int.MinValue);
         }
         finally
         {
             callbacks.Clear();
         }
         if (exceptions != null)
         {
             throw new AggregateException(exceptions);
         }
     }
 }
        /// <summary>
        /// Tries to load the referenced assemblies.
        /// </summary>
        /// <param name="inputAssemblies">Assemblies</param>
        private void TryLoadReferencedAssemblies(Assembly[] inputAssemblies)
        {
            var ws = new SafeDictionary<string, Assembly>();

            foreach (Assembly a in inputAssemblies)
            {
                if (a == null)
                {
                    continue;
                }

                // recursively load all the assemblies reachables from the root!
                if (!Assemblies.ContainsKey(
                    a.GetName().FullName) && !ws.ContainsKey(a.GetName().FullName))
                {
                    ws.Add(a.GetName().FullName, a);
                }

                while (ws.Count > 0)
                {
                    var en = ws.Keys.GetEnumerator();
                    en.MoveNext();
                    var a_name = en.Current;
                    var a_assembly = ws[a_name];
                    Assemblies.Add(a_name, a_assembly);
                    ws.Remove(a_name);

                    foreach (AssemblyName name in a_assembly.GetReferencedAssemblies())
                    {
                        Assembly b;
                        ExtendedReflection.Utilities.ReflectionHelper.TryLoadAssembly(name.FullName, out b);

                        if (b != null)
                        {
                            if (!Assemblies.ContainsKey(b.GetName().FullName) &&
                                !ws.ContainsKey(b.GetName().FullName))
                            {
                                ws.Add(b.GetName().FullName, b);
                            }
                        }
                    }
                }
            }
        }
 /// <summary>
 /// 'Borrowed' from Sitecore.Xml.Xsl.ImageRenderer
 /// </summary>
 /// <param name="values"></param>
 /// <param name="keys"></param>
 /// <returns></returns>
 private static string Extract(SafeDictionary<string> values, params string[] keys)
 {
     Assert.ArgumentNotNull((object)values, "values");
     Assert.ArgumentNotNull((object)keys, "keys");
     foreach (string key in keys)
     {
         string str = values[key];
         if (str != null)
         {
             values.Remove(key);
             return str;
         }
     }
     return (string)null;
 }