public IList GetSubscribers(IMessage message, bool evalSelector)
        {
            lock (_objLock)
            {
                bool filter = true;
                if (message.headers == null || message.headers.Count == 0)
                {
                    filter = false;
                }

                if (!filter)
                {
                    return(GetSubscribers());
                }
                else
                {
                    Subtopic subtopic = null;
                    if (message.headers.ContainsKey(AsyncMessage.SubtopicHeader))
                    {
                        subtopic = new Subtopic(message.headers[AsyncMessage.SubtopicHeader] as string);
                        MessagingAdapter messagingAdapter = _messageDestination.ServiceAdapter as MessagingAdapter;
                        if (messagingAdapter != null)
                        {
                            if (!messagingAdapter.AllowSend(subtopic))
                            {
                                return(null);
                            }
                        }
                    }

                    ArrayList subscribers = new ArrayList();
                    foreach (MessageClient messageClient in _subscribers.Values)
                    {
                        bool include = true;
                        if (subtopic != null && messageClient.Subtopic != null)
                        {
                            include = include && subtopic.Matches(messageClient.Subtopic);
                        }
                        if (messageClient.Selector != null && evalSelector)
                        {
                            include = include && messageClient.Selector.Evaluate(null, message.headers);
                        }

                        if (include)
                        {
                            subscribers.Add(messageClient.ClientId);
                        }
                    }
                    return(subscribers);
                }
            }
        }
Exemple #2
0
 public IList GetSubscribers(IMessage message, bool evalSelector)
 {
     lock (_objLock)
     {
         bool flag = true;
         if ((message.headers == null) || (message.headers.Count == 0))
         {
             flag = false;
         }
         if (!flag)
         {
             return(this.GetSubscribers());
         }
         Subtopic subtopic = null;
         if (message.headers.ContainsKey("DSSubtopic"))
         {
             subtopic = new Subtopic(message.headers["DSSubtopic"] as string);
             MessagingAdapter serviceAdapter = this._messageDestination.ServiceAdapter as MessagingAdapter;
             if ((serviceAdapter != null) && !serviceAdapter.AllowSend(subtopic))
             {
                 return(null);
             }
         }
         ArrayList list = new ArrayList();
         foreach (MessageClient client in this._subscribers.Values)
         {
             bool flag2 = true;
             if ((subtopic != null) && (client.Subtopic != null))
             {
                 flag2 = flag2 && subtopic.Matches(client.Subtopic);
             }
             if ((client.Selector != null) && evalSelector)
             {
                 flag2 = flag2 && client.Selector.Evaluate(null, message.headers);
             }
             if (flag2)
             {
                 list.Add(client.ClientId);
             }
         }
         return(list);
     }
 }