Ejemplo n.º 1
0
        void thread_procedure()
        {
            // Initially, we multicast an hello
            lock (this) { com.SendMulticastMessage(messages.PackTLV(tlv_utils.shortHello())); }
            while (!disposed)
            {
                lock (this) // Mutual exclusion to be thread safe
                {
                    if (!disposed)
                    {
                        // Peers
                        p.RemoveOldNeighbors();
                        if (lastHelloSaid == null || lastHelloSaid.ElapsedMilliseconds >= Peers.helloNeighborsDelay * 1000)
                        {
                            p.SayHello();
                            lastHelloSaid = Stopwatch.StartNew();
                        }
                        if (lastNeighborsSaid == null || lastNeighborsSaid.ElapsedMilliseconds >= Peers.sendNeighborsDelay * 1000)
                        {
                            p.SendNeighbors();
                            lastNeighborsSaid = Stopwatch.StartNew();
                        }
                        // Flooding
                        c.RemoveOldMessages();
                        c.Flood();
                    }
                }

                Thread.Sleep(r.Next(250, 750)); // A little random...
            }
        }
Ejemplo n.º 2
0
 public void SayHello()
 {
     // Short hello if not enough neighbours
     if (GetSymetricsNeighbors().Length < searchNeighborsThreshold)
     {
         PeerAddress[] ps = potentialNeighbors.Keys.ToArray();
         foreach (PeerAddress p in ps)
         {
             if (!neighborsTable.ContainsKey(p))
             {
                 com.SendMessage(p, messages.PackTLV(tlv_utils.shortHello()));
                 if (potentialNeighbors[p] >= 0 && potentialNeighbors[p] < int.MaxValue)
                 {
                     potentialNeighbors[p]++;
                 }
             }
         }
     }
     // Long hello
     foreach (PeerAddress p in GetNeighbors())
     {
         ulong dest_ID = neighborsTable[p].ID;
         com.SendMessage(p, messages.PackTLV(tlv_utils.longHello(dest_ID)));
     }
 }