Ejemplo n.º 1
0
        public void ReceiveJoinDataPacket(JoinData packet)
        {
            if (!MessageCache.Contains(new MessagePrint(packet.SourceIp, packet.SequenceNumber)))
            {
                MessageCache.Add(new MessagePrint(packet.SourceIp, packet.SequenceNumber));
                RoutingTable.Add(new RoutingTableElement(packet.SourceIp, packet.PreviousHopIp));

                if (packet.MulticastGroupIp == NodeId)
                {
                    JoinTable newJoinTablePacket = new JoinTable(packet.PreviousHopIp, packet.SequenceNumber, packet.SourceIp, NodeId, NodeId);
                    SendJoinTable(newJoinTablePacket);
                }
                else
                {
                    JoinData newPacket = new JoinData(packet.TTL, packet.SequenceNumber, packet.SourceIp, NodeId, packet.MulticastGroupIp);
                    if (newPacket.SourceIp != NodeId)
                    {
                        newPacket.HopCount = packet.HopCount + 1;
                        newPacket.TTL--;
                    }

                    if (newPacket.TTL > 0)
                    {
                        SendJoinData(newPacket);
                    }
                }
            }
        }
Ejemplo n.º 2
0
 public void SendMessage(int receiveIp)
 {
     if (!ForwardingTable.Contains(new ForwardingTableElement(receiveIp)))
     {
         JoinData newJoinDataPacket = new JoinData(20, SequenceId, NodeId, NodeId, receiveIp);
         ReceiveJoinDataPacket(newJoinDataPacket);
     }
     else
     {
         DataPacket newDataPacket = new DataPacket(SequenceId, receiveIp, NodeId, "");
         MessageCache.Add(new MessagePrint(newDataPacket.SourceIp, newDataPacket.SequenceId));
         SendData(newDataPacket);
     }
 }
Ejemplo n.º 3
0
 private void SendJoinData(JoinData packet)
 {
     foreach (var nnode in NodeScanner.GetNearbyNodes(this, AllNodes))
     {
         int timeElapsed = 0;
         new Thread(() =>
         {
             Thread.Sleep((int)(nnode.Key * 10) - timeElapsed);
             timeElapsed += (int)(nnode.Key * 10);
             Thread.CurrentThread.IsBackground = true;
             nnode.Value.ReceiveJoinDataPacket(packet);
             OnPacketSent(packet, new EventArgs());
         }).Start();
     }
 }