示例#1
0
 public void queuEvent(publisherParameters parameters)
 {
     if (!deliverStatus.ContainsKey(parameters.processName))
     {
         deliverStatus.Add(parameters.processName, 1);
     }
     if (freezeMode.Equals("Unfreeze"))
     {
         if (routingPolicy.Equals("filter"))
         {
             commandList.Add(parameters);
             ThreadStart td  = new ThreadStart(this.deliverEvents);
             Thread      t_d = new Thread(td);
             t_d.Start();
             ThreadStart t_f = new ThreadStart(this.filteringBase);
             Thread      t   = new Thread(t_f);
             t.Start();
         }
         else
         {
             commandList.Add(parameters);
             ThreadStart td  = new ThreadStart(this.deliverEvents);
             Thread      t_d = new Thread(td);
             t_d.Start();
             ThreadStart ts = new ThreadStart(this.floodingEvents);
             Thread      t  = new Thread(ts);
             t.Start();
         }
     }
     else
     {
         freezeList.Add(parameters);
     }
 }
示例#2
0
        public void addPublication(publisherParameters parameters)
        {
            commands.Add(parameters);
            ThreadStart td  = new ThreadStart(this.AddEvent);
            Thread      t_d = new Thread(td);

            t_d.Start();
        }
示例#3
0
 public void queueEventForTotal(publisherParameters publisher)
 {
     if (freezeMode.Equals("Unfreeze"))
     {
         commandListForTotal.Add(publisher);
         ThreadStart td  = new ThreadStart(this.sendToRoot);
         Thread      t_d = new Thread(td);
         t_d.Start();
     }
     else
     {
         freezeList.Add(publisher);
     }
 }
示例#4
0
 public void deliverEvent(publisherParameters evento)
 {
     if (!freeze)
     {
         eventsToDeliver.Add(evento);
         ThreadStart td  = new ThreadStart(this.deliver);
         Thread      t_d = new Thread(td);
         t_d.Start();
     }
     else
     {
         freezeList.Add(evento);
     }
 }
示例#5
0
        private void completeRequestOnWait(string pub)
        {
            string result  = "";
            int    tamanho = 0;

            if (orderType.Equals("FIFO"))
            {
                tamanho = waitingList[pub].Count;
                for (int i = 0; i < tamanho; i++)
                {
                    publisherParameters parameters = waitingList[pub][i];
                    if (parameters.sequenceNumber == deliverStatus[pub])
                    {
                        result = existTopic(parameters);
                        if (!result.Equals(""))
                        {
                            foreach (string url in topicsSubscriptons[result])
                            {
                                SubscriberInterface sub = (SubscriberInterface)Activator.GetObject(typeof(SubscriberInterface), url);
                                sub.deliverEvent(parameters);
                            }
                        }
                        deliverStatus[pub]++;
                    }
                }
            }
            else
            {
                foreach (publisherParameters publisher in waitingListForTotal)
                {
                    if (publisher.sequenceNumber == totalLocalOrder)
                    {
                        result = existTopic(publisher);
                        if (!result.Equals(""))
                        {
                            foreach (string url in topicsSubscriptons[result])
                            {
                                SubscriberInterface sub = (SubscriberInterface)Activator.GetObject(typeof(SubscriberInterface), url);
                                sub.deliverEvent(publisher);
                            }
                        }
                        totalLocalOrder++;
                    }
                }
            }
        }
示例#6
0
 public void sendToRoot()
 {
     lock (this)
     {
         publisherParameters publish = new publisherParameters();
         if (commandListForTotal.Count >= (rountingEventManagerRoot + 1))
         {
             publish = commandListForTotal[rountingEventManagerRoot];
             rountingEventManagerRoot++;
             if (!fatherBrokerUrl.Equals("none"))
             {
                 BrokerInterface brokerFather = (BrokerInterface)Activator.GetObject(typeof(BrokerInterface), fatherBrokerUrl);
                 brokerFather.queueEventForTotal(publish);
             }
             else
             {
                 publish.sequenceNumber  = globalSequenceNumber;
                 publish.urlBrokerSender = brokerData.url;
                 globalSequenceNumber++;
                 if (routingPolicy.Equals("filter"))
                 {
                     commandList.Add(publish);
                     ThreadStart td  = new ThreadStart(this.deliverEvents);
                     Thread      t_d = new Thread(td);
                     t_d.Start();
                     ThreadStart t_f = new ThreadStart(this.filteringBase);
                     Thread      t   = new Thread(t_f);
                     t.Start();
                 }
                 else
                 {
                     commandList.Add(publish);
                     ThreadStart td  = new ThreadStart(this.deliverEvents);
                     Thread      t_d = new Thread(td);
                     t_d.Start();
                     ThreadStart ts = new ThreadStart(this.floodingEvents);
                     Thread      t  = new Thread(ts);
                     t.Start();
                 }
             }
         }
     }
 }
示例#7
0
 private bool searchSequenceNumber(publisherParameters request2)
 {
     if (orderType.Equals("FIFO"))
     {
         foreach (string pub in deliverStatus.Keys)
         {
             if (pub.Equals(request2.processName) && request2.sequenceNumber == deliverStatus[pub])
             {
                 return(true);
             }
         }
     }
     else
     {
         if (totalLocalOrder == request2.sequenceNumber)
         {
             return(true);
         }
     }
     return(false);
 }
示例#8
0
        private string existTopic(publisherParameters request2)
        {
            string result = "";

            foreach (string topic in topicsSubscriptons.Keys)
            {
                char lastCharOfSubscription = topic[topic.Length - 1];
                if (lastCharOfSubscription == '/')
                {
                    if (request2.topicName.Contains(topic))
                    {
                        result = topic;
                    }
                }
                else
                {
                    if (request2.topicName.Equals(topic))
                    {
                        result = topic;
                    }
                }
            }
            return(result);
        }
示例#9
0
        public void deliverEvents()
        {
            string result = "";

            switch (orderType)
            {
            case "NO":
                lock (this)
                {
                    publisherParameters request = new publisherParameters();
                    if (commandList.Count >= (orderManager + 1))
                    {
                        request = commandList[orderManager];
                        orderManager++;
                        result = existTopic(request);
                        if (!result.Equals(""))
                        {
                            foreach (string url in topicsSubscriptons[result])
                            {
                                SubscriberInterface sub = (SubscriberInterface)Activator.GetObject(typeof(SubscriberInterface), url);
                                sub.deliverEvent(request);
                            }
                        }
                    }
                }
                break;

            case "FIFO":
                lock (this) {
                    publisherParameters request2 = new publisherParameters();
                    if (commandList.Count >= (orderManager + 1))
                    {
                        request2 = commandList[orderManager];
                        orderManager++;
                        result = existTopic(request2);
                        if (searchSequenceNumber(request2))
                        {
                            if (!result.Equals(""))
                            {
                                foreach (string url in topicsSubscriptons[result])
                                {
                                    SubscriberInterface sub = (SubscriberInterface)Activator.GetObject(typeof(SubscriberInterface), url);
                                    sub.deliverEvent(request2);
                                }
                            }
                            deliverStatus[request2.processName]++;
                        }
                        else
                        {
                            List <publisherParameters> list;
                            if (!waitingList.TryGetValue(request2.processName, out list))
                            {
                                list = new List <publisherParameters>();
                                waitingList.Add(request2.processName, list);
                                list.Add(request2);
                            }
                            else
                            {
                                waitingList[request2.processName].Add(request2);
                            }
                        }
                        if (waitingList.Count != 0 && waitingList.ContainsKey(request2.processName))
                        {
                            completeRequestOnWait(request2.processName);
                        }
                    }
                }
                break;

            case "TOTAL":
                lock (this)
                {
                    publisherParameters request3 = new publisherParameters();
                    if (commandList.Count >= (orderManager + 1))
                    {
                        request3 = commandList[orderManager];
                        orderManager++;
                        result = existTopic(request3);
                        if (searchSequenceNumber(request3))
                        {
                            if (!result.Equals(""))
                            {
                                foreach (string url in topicsSubscriptons[result])
                                {
                                    SubscriberInterface sub = (SubscriberInterface)Activator.GetObject(typeof(SubscriberInterface), url);
                                    sub.deliverEvent(request3);
                                }
                            }
                            totalLocalOrder++;
                        }
                        else
                        {
                            waitingListForTotal.Add(request3);
                        }
                        if (waitingListForTotal.Count != 0)
                        {
                            completeRequestOnWait(request3.processName);
                        }
                    }
                }
                break;
            }
        }
示例#10
0
 public void queueEventForTotal(publisherParameters publisher)
 {
     queuTotal(publisher);
 }
示例#11
0
 public void queuEvent(publisherParameters parameters2)
 {
     pub(parameters2);
 }
示例#12
0
 public void deliverEvent(publisherParameters evento)
 {
     eventoDel(evento);
 }
示例#13
0
        public void AddEvent()
        {
            List <string>       list;
            int                 sqNumber;
            publisherParameters publish;

            publish = commands[commands.Count - 1];
            int number = Int32.Parse(publish.numberEvents);

            for (int i = 0; i < number; i++)
            {
                lock (this)
                {
                    if (!ordertype.Equals("TOTAL"))
                    {
                        sequenceNumber += 1;
                        sqNumber        = sequenceNumber;
                    }
                    else
                    {
                        sqNumber = 0;
                    }
                    string events = publish.processName + sqNumber;
                    if (!allEvents.TryGetValue(publish.topicName, out list))
                    {
                        list = new List <string>();
                        allEvents.Add(publish.topicName, list);
                        publish.sequenceNumber = sqNumber;
                        list.Add(events);
                        publish.urlBroker = broker.getData().url;
                        if (!freeze)
                        {
                            Console.WriteLine("PubEvent: " + publish.processName + ", " + publish.topicName + ", " + sqNumber);
                            if (!ordertype.Equals("TOTAL"))
                            {
                                broker.queuEvent(publish);
                            }
                            else
                            {
                                broker.queueEventForTotal(publish);
                            }
                            broker.logMsgFromBrokerToMaster("PubEvent: " + publish.processName + ", " + publish.topicName + ", " + sqNumber);
                        }
                        else
                        {
                            publisherParameters pub = new publisherParameters();
                            pub.processName    = publish.processName;
                            pub.topicName      = publish.topicName;
                            pub.numberEvents   = publish.numberEvents;
                            pub.intervaloTempo = publish.intervaloTempo;
                            pub.type           = publish.type;
                            pub.sequenceNumber = publish.sequenceNumber;
                            pub.urlBroker      = publish.urlBroker;
                            freezeList.Add(pub);
                        }
                        int intervalo = Int32.Parse(publish.intervaloTempo);
                        Thread.Sleep(intervalo);
                    }
                    else
                    {
                        allEvents[publish.topicName].Add(events);
                        publish.sequenceNumber = sqNumber;
                        publish.urlBroker      = broker.getData().url;
                        if (!freeze)
                        {
                            Console.WriteLine("PubEvent: " + publish.processName + ", " + publish.topicName + ", " + sqNumber);
                            if (!ordertype.Equals("TOTAL"))
                            {
                                broker.queuEvent(publish);
                            }
                            else
                            {
                                broker.queueEventForTotal(publish);
                            }
                            broker.logMsgFromBrokerToMaster("PubEvent: " + publish.processName + ", " + publish.topicName + ", " + sqNumber);
                        }
                        else
                        {
                            publisherParameters pub = new publisherParameters();
                            pub.processName    = publish.processName;
                            pub.topicName      = publish.topicName;
                            pub.numberEvents   = publish.numberEvents;
                            pub.intervaloTempo = publish.intervaloTempo;
                            pub.type           = publish.type;
                            pub.sequenceNumber = publish.sequenceNumber;
                            pub.urlBroker      = publish.urlBroker;
                            freezeList.Add(pub);
                        }
                        int intervalo = Int32.Parse(publish.intervaloTempo);
                        Thread.Sleep(intervalo);
                    }
                }
            }
        }
示例#14
0
 public void addPublication(publisherParameters parameters)
 {
     pub(parameters);
 }