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); } }
public void addPublication(publisherParameters parameters) { commands.Add(parameters); ThreadStart td = new ThreadStart(this.AddEvent); Thread t_d = new Thread(td); t_d.Start(); }
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); } }
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); } }
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++; } } } }
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(); } } } } }
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); }
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); }
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; } }
public void queueEventForTotal(publisherParameters publisher) { queuTotal(publisher); }
public void queuEvent(publisherParameters parameters2) { pub(parameters2); }
public void deliverEvent(publisherParameters evento) { eventoDel(evento); }
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); } } } }
public void addPublication(publisherParameters parameters) { pub(parameters); }