コード例 #1
0
 public void DoSequence(Bludger bludger)
 {
     lock (this)
     {
         broker.DoSequence(bludger);
     }
 }
コード例 #2
0
 public void DoSequence(Bludger bludger)
 {
     lock (this)
     {
         broker.DoSequence(bludger);
     }
 }
コード例 #3
0
 public void DiffuseBludger(Bludger b)
 {
     foreach (var c in this.broker.GetChildren())
     {
         c.Bludger(b);
     }
 }
コード例 #4
0
        public void ConfirmDeliver(Event e)
        {
            string publisherId = e.Publisher;

            lock (messages[publisherId])
            {
                int dequed = messages[publisherId].Dequeue();
                Monitor.PulseAll(messages[publisherId]);
            }
            lock (this)
            {
                while (this.sequencers.Count() > 0 && !HasMessage(this.sequencers.Peek()))
                {
                    this.broker.DoSequence(sequencers.Dequeue());
                }

                while (this.bludgers.Count() > 0 && !HasMessage(this.bludgers.Peek()))
                {
                    this.broker.DoBludger(bludgers.Dequeue());
                }
            }
            // If this is the first broker, we start a Sequence request
            if (e.Sender.Equals(this.broker.SiteName))
            {
                Bludger bludger = new Bludger(e.Publisher, e.Topic, e.SequenceNumber);
                this.broker.Sequence(bludger);
            }
        }
コード例 #5
0
 public void DoBludger(Bludger bludger)
 {
     lock (this)
     {
         broker.DoBludger(bludger);
     }
 }
コード例 #6
0
ファイル: Flooding.cs プロジェクト: pasadinhas/dad-project
 public void DiffuseBludger(Bludger b)
 {
     foreach (var c in this.broker.GetChildren())
     {
         c.Bludger(b);
     }
 }
コード例 #7
0
 public void Bludger(Bludger bludger)
 {
     lock (this)
     {
         broker.Bludger(bludger);
     }
 }
コード例 #8
0
 public void Bludger(Bludger bludger)
 {
     if (bludgerRep.IsRepeated(bludger.Sequence, bludger.Publisher))
     {
         return;
     }
     pool.AssyncInvoke(new WaitCallback(ProcessBludger), bludger);
 }
コード例 #9
0
        public void ProcessSequence(Object b)
        {
            Bludger bludger = b as Bludger;

            if (order.FreezeSequencerIfNeeded(bludger))
            {
                return;
            }

            DoSequence(bludger);
        }
コード例 #10
0
 public void DoSequence(Bludger bludger)
 {
     if (this.IsRoot)
     {
         this.Bludger(bludger);
     }
     else
     {
         this.ParentSiteBroker.Sequence(bludger);
     }
 }
コード例 #11
0
        public void ProcessBludger(Object b)
        {
            Bludger bludger = b as Bludger;

            if (order.FreezeBludgerIfNeeded(bludger))
            {
                return;
            }

            DoBludger(bludger);
        }
コード例 #12
0
        public void DoBludger(Bludger bludger)
        {
            this.router.DiffuseBludger(bludger);

            ICollection <NodePair <ISubscriber> > subscribersToSend = Data.SubscribersFor(bludger.Topic);

            foreach (var subscriberPair in subscribersToSend)
            {
                subscriberPair.Node.Bludger(bludger);
            }
        }
コード例 #13
0
 public bool FreezeBludgerIfNeeded(Bludger bludger)
 {
     lock (this)
     {
         if (this.HasMessage(bludger.Publisher, bludger.Sequence) || bludgers.Count > 0)
         {
             bludgers.Enqueue(bludger);
             return(true);
         }
         return(false);
     }
 }
コード例 #14
0
        public void DiffuseBludger(Bludger b)
        {
            ICollection <NodePair <IBroker> > brokersToSend = broker.Data.RoutingFor(b.Topic);

            foreach (NodePair <IBroker> brokerPair in brokersToSend)
            {
                if (!brokerPair.Name.Equals(this.broker.ParentName))
                {
                    brokerPair.Node.Bludger(b);
                }
            }
        }
コード例 #15
0
        public void Bludger(Bludger bludger)
        {
            this.BlockWhileFrozen();
            lock (this)
            {
                if (blu.IsRepeated(bludger.Sequence, bludger.Publisher))
                {
                    return;
                }

                foreach (var e in freezer)
                {
                    if (e.SequenceNumber == bludger.Sequence && e.Publisher == bludger.Publisher)
                    {
                        Console.WriteLine("Publisher: {0} Topic: {1} SN: {2}", e.Publisher, e.Topic, e.GetSequenceNumber());
                        logServer.LogAction("SubEvent " + name + " " + e.Publisher + " " + e.Topic + " " + e.SequenceNumber);
                        return;
                    }
                }
            }
        }
コード例 #16
0
        public void Bludger(Bludger bludger)
        {
            this.BlockWhileFrozen();
            lock (this)
            {
                if (blu.IsRepeated(bludger.Sequence, bludger.Publisher))
                {
                    return;
                }

                foreach (var e in freezer)
                {
                    if (e.SequenceNumber == bludger.Sequence && e.Publisher == bludger.Publisher)
                    {
                        Console.WriteLine("Publisher: {0} Topic: {1} SN: {2}", e.Publisher, e.Topic, e.GetSequenceNumber());
                        logServer.LogAction("SubEvent " + name + " " + e.Publisher + " " + e.Topic + " " + e.SequenceNumber);
                        return;
                    }
                }
            }
        }
コード例 #17
0
 private bool HasMessage(Bludger bludger)
 {
     return(HasMessage(bludger.Publisher, bludger.Sequence));
 }
コード例 #18
0
ファイル: BrokerLogic.cs プロジェクト: pasadinhas/dad-project
 public void Sequence(Bludger bludger)
 {
     if (sequencerRep.IsRepeated(bludger.Sequence, bludger.Publisher))
     {
         return;
     }
     pool.AssyncInvoke(new WaitCallback(ProcessSequence), bludger);
 }
コード例 #19
0
ファイル: BrokerLogic.cs プロジェクト: pasadinhas/dad-project
 public void DoSequence(Bludger bludger)
 {
     if (this.IsRoot)
     {
         this.Bludger(bludger);
     }
     else
     {
         this.ParentSiteBroker.Sequence(bludger);
     }
 }
コード例 #20
0
 public bool FreezeSequencerIfNeeded(Bludger bludger)
 {
     throw new NotImplementedException();
 }
コード例 #21
0
 public bool FreezeBludgerIfNeeded(Bludger bludger)
 {
     return false;
 }
コード例 #22
0
 public void Bludger(Bludger bludger)
 {
     subscriber.Bludger(bludger);
 }
コード例 #23
0
 public bool FreezeBludgerIfNeeded(Bludger bludger)
 {
     return(false);
 }
コード例 #24
0
 public void Bludger(Bludger bludger)
 {
     subscriber.Bludger(bludger);
 }
コード例 #25
0
ファイル: BrokerLogic.cs プロジェクト: pasadinhas/dad-project
        public void DoBludger(Bludger bludger)
        {
            this.router.DiffuseBludger(bludger);

            ICollection<NodePair<ISubscriber>> subscribersToSend = Data.SubscribersFor(bludger.Topic);

            foreach (var subscriberPair in subscribersToSend)
            {
                subscriberPair.Node.Bludger(bludger);
            }
        }
コード例 #26
0
 public bool FreezeSequencerIfNeeded(Bludger bludger)
 {
     throw new NotImplementedException();
 }