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); } } } }
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); } }
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(); } }