public void GetMessagesForSubscriberOfTopic(string topic, NewsSubscriber subscriber) { if (messagesQueue.Count == 0) { Console.WriteLine("No messages from publishers to display"); } else { while (messagesQueue.Count != 0) { Message message = messagesQueue.Dequeue(); if (message.Topic.ToLower().Equals(topic.ToLower())) { HashSet <Subscriber> subscribersOfTopic = subscribersTopicMap[topic]; foreach (Subscriber _subscriber in subscribersOfTopic) { if (_subscriber.Equals(subscriber)) { //add broadcasted message to subscriber message queue List <Message> subscriberMessages = subscriber.SubscriberMessages; subscriberMessages.Add(message); subscriber.SubscriberMessages = subscriberMessages; } } } } } }
public void RemoveSubscriber(string topic, NewsSubscriber subscriber) { if (subscribersTopicMap.ContainsKey(topic)) { HashSet <Subscriber> subscribers = subscribersTopicMap[topic]; subscribers.Remove(subscriber); subscribersTopicMap[topic] = subscribers; } }
public static void Main(string[] args) { //Instantiate publishers, subscribers and PubSubService IPublisher sportNewsPublisher = new NewsPublisher(); IPublisher politicalNewsPublisher = new NewsPublisher(); Subscriber sportSubscriber = new NewsSubscriber(); Subscriber politicsSubscriber = new NewsSubscriber(); Subscriber newsSubscriber = new NewsSubscriber(); //Declare Messages and Publish Messages to PubSubService Message sportMsg1 = new Message("Sport", "Sport news 1"); Message sportMsg2 = new Message("Sport", "sport news 2"); Message politicsMsg3 = new Message("Politics", "politics 1223"); // PubSubService pubSubService = new PubSubService(); sportNewsPublisher.publish(sportMsg1, pubSubService); sportNewsPublisher.publish(sportMsg2, pubSubService); politicalNewsPublisher.publish(politicsMsg3, pubSubService); //Declare Subscribers sportSubscriber.AddSubscriber("Sport", pubSubService); politicsSubscriber.AddSubscriber("Politics", pubSubService); newsSubscriber.AddSubscriber("Sport", pubSubService); newsSubscriber.AddSubscriber("Politics", pubSubService); //Trying unSubscribing a subscriber //newsSubscriber.unSubscribe("Sport", pubSubService); //Broadcast message to all subscribers. After broadcast, messageQueue will be empty in PubSubService pubSubService.Broadcast(); //Print messages of each subscriber to see which messages they got Console.WriteLine("Messages of Sport Subscriber are: "); sportSubscriber.printMessages(); Console.WriteLine("\nMessages of Politics Subscriber are: "); politicsSubscriber.printMessages(); Console.WriteLine("\nMessages of News Subscriber are: "); newsSubscriber.printMessages(); Console.Write("\nPress Any Key:"); Console.ReadKey(); }
public void AddSubscriber(string topic, NewsSubscriber subscriber) { if (subscribersTopicMap.ContainsKey(topic)) { HashSet <Subscriber> subscribers = subscribersTopicMap[topic]; subscribers.Add(subscriber); subscribersTopicMap[topic] = subscribers; } else { HashSet <Subscriber> subscribers = new HashSet <Subscriber>(); subscribers.Add(subscriber); subscribersTopicMap.Add(topic, subscribers); } }