Esempio n. 1
0
File: Node.cs Progetto: roinissan/C-
 //sends routing messages to all the immediate neighbors
 private void SendRoutingMessages()
 {
     foreach (int n in m_routers.Keys)
     {
         RoutingMessage new_routing_message = new RoutingMessage(ID, n, m_distances);
         baton.WaitOne();
         m_dNeighbors[n].Send(new_routing_message);
         baton.ReleaseMutex();
     }
 }
Esempio n. 2
0
File: Node.cs Progetto: roinissan/C-
        //handles an incoming routing neighbors according to the Bellman-Ford algorithm
        private void HandleRoutingMessage(RoutingMessage rmsg)
        {
            int  iDistance;
            bool is_changed = false;

            if (!m_distances.ContainsKey(ID))
            {
                m_distances.Add(ID, 0);
                m_routers.Add(ID, ID);
            }
            foreach (int dist_id in m_dNeighbors.Keys)
            {
                if (!m_distances.ContainsKey(dist_id))
                {
                    m_distances.Add(dist_id, 1);
                    m_routers.Add(dist_id, dist_id);
                }
            }
            SendRoutingMessages();


            List <int> nodes = rmsg.GetAllNodes();

            foreach (int iNode in nodes)
            {
                iDistance = rmsg.GetDistance(iNode);
                if (!m_distances.ContainsKey(iNode) || m_distances[iNode] > iDistance + 1)
                {
                    m_distances[iNode] = iDistance + 1;
                    m_routers[iNode]   = rmsg.Sender;
                    is_changed         = true;
                }
            }

            if (is_changed)
            {
                baton.WaitOne();
                SendRoutingMessages();
                baton.ReleaseMutex();
            }
        }