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); }
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); }
public void AddXmppHandler(Jid address, IXmppHandler handler) { HandlerStorage.AddXmppHandler(address, handler); }
public void RemoveXmppHandler(IXmppHandler handler) { HandlerStorage.RemoveXmppHandler(handler); }
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); }
public void AddXmppHandler(Jid address, IXmppHandler handler) { handlerStorage.AddXmppHandler(address, handler); }