예제 #1
0
		public void RemoveXmppHandler(IXmppHandler handler)
		{
			if (handler == null) throw new ArgumentNullException("handler");
			try
			{
				locker.EnterWriteLock();

				if (handler is IXmppStreamStartHandler)
				{
					foreach (var keyValuePair in new Dictionary<Jid, List<IXmppStreamStartHandler>>(streamStartHandlers))
					{
						foreach (var h in new List<IXmppStreamStartHandler>(keyValuePair.Value))
						{
							if (handler == h) streamStartHandlers[keyValuePair.Key].Remove(h);
						}
					}
				}

				if (handler is IXmppStreamHandler)
				{
					foreach (var keyValuePair in new Dictionary<string, List<IXmppStreamHandler>>(streamHandlers))
					{
						foreach (var h in new List<IXmppStreamHandler>(keyValuePair.Value))
						{
							if (handler == h) streamHandlers[keyValuePair.Key].Remove(h);
							if (streamHandlers[keyValuePair.Key].Count == 0)
							{
								streamHandlers.Remove(keyValuePair.Key);
							}

						}
					}
				}

				if (handler is IXmppStanzaHandler)
				{
					foreach (var keyValuePair in new Dictionary<string, List<IXmppStanzaHandler>>(stanzaHandlers))
					{
						foreach (var h in new List<IXmppStanzaHandler>(keyValuePair.Value))
						{
							if (handler == h) stanzaHandlers[keyValuePair.Key].Remove(h);
							if (stanzaHandlers[keyValuePair.Key].Count == 0)
							{
								stanzaHandlers.Remove(keyValuePair.Key);
							}

						}
					}
				}
			}
			finally
			{
				locker.ExitWriteLock();
			}

			handler.OnUnregister(serviceProvider);
		}
        private Type[] GetHandledTypes(IXmppHandler handler)
        {
            var types = new List <object>(handler.GetType().GetCustomAttributes(typeof(XmppHandlerAttribute), true))
                        .ConvertAll <Type>(o => ((XmppHandlerAttribute)o).XmppElementType);

            if (types.Count == 0)
            {
                types.Add(null);
            }
            return(types.ToArray());
        }
        public void AddXmppHandler(Jid address, IXmppHandler handler)
        {
            if (handler == null)
            {
                throw new ArgumentNullException("handler");
            }
            try
            {
                locker.EnterWriteLock();

                if (handler is IXmppStreamStartHandler)
                {
                    if (!streamStartHandlers.ContainsKey(address))
                    {
                        streamStartHandlers[address] = new List <IXmppStreamStartHandler>();
                    }
                    streamStartHandlers[address].Add((IXmppStreamStartHandler)handler);
                }

                if (handler is IXmppStreamHandler)
                {
                    foreach (var type in GetHandledTypes(handler))
                    {
                        var key = GetHandlerKey(address, type);
                        if (!streamHandlers.ContainsKey(key))
                        {
                            streamHandlers[key] = new List <IXmppStreamHandler>();
                        }
                        streamHandlers[key].Add((IXmppStreamHandler)handler);
                    }
                }

                if (handler is IXmppStanzaHandler)
                {
                    foreach (var type in GetHandledTypes(handler))
                    {
                        var key = GetHandlerKey(address, type);
                        if (!stanzaHandlers.ContainsKey(key))
                        {
                            stanzaHandlers[key] = new List <IXmppStanzaHandler>();
                        }
                        stanzaHandlers[key].Add((IXmppStanzaHandler)handler);
                    }
                }
            }
            finally
            {
                locker.ExitWriteLock();
            }

            handler.OnRegister(serviceProvider);
        }
예제 #4
0
		public void AddXmppHandler(Jid address, IXmppHandler handler)
		{
			if (handler == null) throw new ArgumentNullException("handler");
			try
			{
				locker.EnterWriteLock();

				if (handler is IXmppStreamStartHandler)
				{
					if (!streamStartHandlers.ContainsKey(address)) streamStartHandlers[address] = new List<IXmppStreamStartHandler>();
					streamStartHandlers[address].Add((IXmppStreamStartHandler)handler);
				}

				if (handler is IXmppStreamHandler)
				{
					foreach (var type in GetHandledTypes(handler))
					{
						var key = GetHandlerKey(address, type);
						if (!streamHandlers.ContainsKey(key)) streamHandlers[key] = new List<IXmppStreamHandler>();
						streamHandlers[key].Add((IXmppStreamHandler)handler);
					}
				}

				if (handler is IXmppStanzaHandler)
				{
					foreach (var type in GetHandledTypes(handler))
					{
						var key = GetHandlerKey(address, type);
						if (!stanzaHandlers.ContainsKey(key)) stanzaHandlers[key] = new List<IXmppStanzaHandler>();
						stanzaHandlers[key].Add((IXmppStanzaHandler)handler);
					}
				}
			}
			finally
			{
				locker.ExitWriteLock();
			}

			handler.OnRegister(serviceProvider);
		}
        public void RemoveXmppHandler(IXmppHandler handler)
        {
            if (handler == null)
            {
                throw new ArgumentNullException("handler");
            }
            try
            {
                locker.EnterWriteLock();

                if (handler is IXmppStreamStartHandler)
                {
                    foreach (var keyValuePair in new Dictionary <Jid, List <IXmppStreamStartHandler> >(streamStartHandlers))
                    {
                        foreach (var h in new List <IXmppStreamStartHandler>(keyValuePair.Value))
                        {
                            if (handler == h)
                            {
                                streamStartHandlers[keyValuePair.Key].Remove(h);
                            }
                        }
                    }
                }

                if (handler is IXmppStreamHandler)
                {
                    foreach (var keyValuePair in new Dictionary <string, List <IXmppStreamHandler> >(streamHandlers))
                    {
                        foreach (var h in new List <IXmppStreamHandler>(keyValuePair.Value))
                        {
                            if (handler == h)
                            {
                                streamHandlers[keyValuePair.Key].Remove(h);
                            }
                            if (streamHandlers[keyValuePair.Key].Count == 0)
                            {
                                streamHandlers.Remove(keyValuePair.Key);
                            }
                        }
                    }
                }

                if (handler is IXmppStanzaHandler)
                {
                    foreach (var keyValuePair in new Dictionary <string, List <IXmppStanzaHandler> >(stanzaHandlers))
                    {
                        foreach (var h in new List <IXmppStanzaHandler>(keyValuePair.Value))
                        {
                            if (handler == h)
                            {
                                stanzaHandlers[keyValuePair.Key].Remove(h);
                            }
                            if (stanzaHandlers[keyValuePair.Key].Count == 0)
                            {
                                stanzaHandlers.Remove(keyValuePair.Key);
                            }
                        }
                    }
                }
            }
            finally
            {
                locker.ExitWriteLock();
            }

            handler.OnUnregister(serviceProvider);
        }
예제 #6
0
 public void AddXmppHandler(Jid address, IXmppHandler handler)
 {
     HandlerStorage.AddXmppHandler(address, handler);
 }
예제 #7
0
 public void RemoveXmppHandler(IXmppHandler handler)
 {
     HandlerStorage.RemoveXmppHandler(handler);
 }
예제 #8
0
		private Type[] GetHandledTypes(IXmppHandler handler)
		{
			var types = new List<object>(handler.GetType().GetCustomAttributes(typeof(XmppHandlerAttribute), true))
				.ConvertAll<Type>(o => ((XmppHandlerAttribute)o).XmppElementType);
			if (types.Count == 0) types.Add(null);
			return types.ToArray();
		}
 public void RemoveXmppHandler(IXmppHandler handler)
 {
     handlerStorage.RemoveXmppHandler(handler);
 }
예제 #10
0
 public void AddXmppHandler(Jid address, IXmppHandler handler)
 {
     handlerStorage.AddXmppHandler(address, handler);
 }