Exemple #1
0
        /// <summary>
        /// generate and sent
        /// </summary>
        /// <returns></returns>
        public void GeneratePacketAndSent(bool isRandom, double EnergyDistCnt, double TransDistanceDistCnt, double DirectionDistCnt, double PrepDistanceDistCnt)
        {
            PublicParamerters.PackeTSequenceID++;
            DistributionsComputations    relatives      = new DistributionsComputations();
            List <RoutingRandomVariable> RelativityRows = relatives.ComputeDistributions(this, PublicParamerters.SinkNode, this, EnergyDistCnt, TransDistanceDistCnt, DirectionDistCnt, PrepDistanceDistCnt);

            if (RelativityRows != null)
            {
                SeletNextHopRandomlly randomGenrator = new SeletNextHopRandomlly();
                RoutingRandomVariable nextHop        = randomGenrator.SelectNextHop(RelativityRows);
                if (nextHop != null)
                {
                    if (RelativityRows.Count > 0)
                    {
                        Datapacket datap = new Datapacket(this, nextHop.NextHopNode);

                        datap.ForwardingRandomNumber = randomGenrator.RandomeNumber;
                        datap.SourceNode             = this;
                        datap.SourceNodeID           = ID;
                        datap.Path     = this.ID.ToString(); // start
                        datap.Distance = Operations.DistanceBetweenTwoSensors(PublicParamerters.SinkNode, this);

                        datap.IsRandomControls     = isRandom;
                        datap.EnergyDistCnt        = EnergyDistCnt;
                        datap.TransDistanceDistCnt = TransDistanceDistCnt;
                        datap.DirectionDistCnt     = DirectionDistCnt;
                        datap.PrepDistanceDistCnt  = PrepDistanceDistCnt;
                        datap.RoutingZoneWidthCnt  = Settings.Default.ZoneWidthCnt;
                        NumberofPacketsGeneratedByMe++;
                        datap.RoutingProbabilityForPath = nextHop.RoutingVariableProb;


                        datap.PacektSequentID = PublicParamerters.PackeTSequenceID;
                        SendData(this, nextHop.NextHopNode, datap);// send the data:
                        if (Settings.Default.ShowRoutigZone)
                        {
                            DrawMyZone();
                        }
                    }

                    this.lbl_Sensing_ID.Foreground = Brushes.Red;
                    // this.lbl_Sensing_ID.FontWeight = FontWeights.Bold;

                    //: historial record:
                    if (Settings.Default.KeepLogs)
                    {
                        HistoricalRelativityRows.AddRange(RelativityRows);
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="FromSensor"></param>
        /// <param name="ToSensor"></param>
        /// <param name="datap"></param>
        public void ReceiveData(Sensor FromSensor, Sensor ToSensor, Datapacket datap)
        {
            if (ToSensor != null || FromSensor != null)
            {
                if (ToSensor.ID != FromSensor.ID)
                {
                    if (ToSensor.ResidualEnergy > 0)
                    {
                        SensorRoutingLog log = new SensorRoutingLog();
                        log.IsReceive            = true;
                        log.NodeID               = this.ID;
                        log.Operation            = "From:" + FromSensor.ID;
                        log.Time                 = DateTime.Now;
                        log.Distance_M           = Operations.DistanceBetweenTwoSensors(ToSensor, FromSensor);
                        log.UsedEnergy_Nanojoule = EnergyModel.Receive(RoutingDataLength);
                        log.PID = datap.PacektSequentID;
                        // set the remain battery Energy:
                        if (ToSensor.ID != PublicParamerters.SinkNode.ID)
                        {
                            double remainEnergy = ResidualEnergy - log.UsedEnergy_Joule;
                            ToSensor.ResidualEnergy       = remainEnergy;
                            log.RemaimBatteryEnergy_Joule = ResidualEnergy;
                        }

                        // routing distance:
                        datap.Path             += ">" + ToSensor.ID;
                        datap.RoutingDistance  += log.Distance_M;
                        datap.Hops             += 1;
                        datap.UsedEnergy_Joule += log.UsedEnergy_Joule;
                        datap.Delay            += DelayModel.DelayModel.Delay(FromSensor, ToSensor);

                        // random:
                        if (datap.IsRandomControls)
                        {
                            // forward: with random random controls:
                            // calculate adil relatives:
                            Sensor RelayNode = ToSensor;
                            DistributionsComputations    relatives      = new DistributionsComputations();
                            List <double>                Controls       = RandomControls.Generate4Controls();
                            List <RoutingRandomVariable> RelativityRows = relatives.ComputeDistributions(datap.SourceNode, PublicParamerters.SinkNode, RelayNode, Controls[0], Controls[1], Controls[2], Controls[3]);
                            SeletNextHopRandomlly        randomGenrator = new SeletNextHopRandomlly();
                            RoutingRandomVariable        nextHop        = randomGenrator.SelectNextHop(RelativityRows);
                            if (nextHop != null) // not the sink
                            {
                                //: historial record:
                                if (Settings.Default.KeepLogs)
                                {
                                    // log.ForwardingRandomNumber = datap.ForwardingRandomNumber;
                                    ToSensor.Logs.Add(log);                            // add the log
                                    HistoricalRelativityRows.AddRange(RelativityRows); // add the log
                                }
                                // forward:
                                Datapacket forwardPacket;
                                if (RelativityRows.Count > 0)
                                {
                                    Sensor NextHopNode = nextHop.NextHopNode;
                                    forwardPacket = new Datapacket(RelayNode, NextHopNode);
                                    forwardPacket.ForwardingRandomNumber = randomGenrator.RandomeNumber;
                                    forwardPacket.SourceNodeID           = datap.SourceNodeID;
                                    forwardPacket.Distance                  = datap.Distance;
                                    forwardPacket.RoutingDistance           = datap.RoutingDistance;
                                    forwardPacket.Path                      = datap.Path;
                                    forwardPacket.Hops                      = datap.Hops;
                                    forwardPacket.UsedEnergy_Joule          = datap.UsedEnergy_Joule;
                                    forwardPacket.Delay                     = datap.Delay;
                                    forwardPacket.SourceNode                = datap.SourceNode;
                                    forwardPacket.IsRandomControls          = true;
                                    forwardPacket.RoutingZoneWidthCnt       = datap.RoutingZoneWidthCnt;
                                    forwardPacket.EnergyDistCnt             = Controls[0];
                                    forwardPacket.TransDistanceDistCnt      = Controls[1];
                                    forwardPacket.DirectionDistCnt          = Controls[2];
                                    forwardPacket.PrepDistanceDistCnt       = Controls[3];
                                    forwardPacket.RoutingProbabilityForPath = datap.RoutingProbabilityForPath * nextHop.RoutingVariableProb;
                                    forwardPacket.PacektSequentID           = datap.PacektSequentID;
                                    RelayNode.SendData(RelayNode, NextHopNode, forwardPacket);
                                }
                            }
                            else // this sink:
                            {
                                if (RelayNode.ID == PublicParamerters.SinkNode.ID)
                                {
                                    RelayNode.PacketsList.Add(datap);
                                }
                            }
                        }
                        else
                        {
                            // forward: without random controls:
                            // calculate adil relatives:
                            Sensor RelayNode = ToSensor;
                            DistributionsComputations    relatives      = new DistributionsComputations();
                            List <RoutingRandomVariable> RelativityRows = relatives.ComputeDistributions(datap.SourceNode, PublicParamerters.SinkNode, RelayNode, Settings.Default.EnergyDistCnt, Settings.Default.TransDistanceDistCnt, Settings.Default.DirectionDistCnt, Settings.Default.PrepDistanceDistCnt);
                            SeletNextHopRandomlly        randomGenrator = new SeletNextHopRandomlly();
                            RoutingRandomVariable        nextHop        = randomGenrator.SelectNextHop(RelativityRows);
                            if (nextHop != null) // not the sink
                            {
                                //: historial record:
                                if (Settings.Default.KeepLogs)
                                {
                                    // log.ForwardingRandomNumber = datap.ForwardingRandomNumber;
                                    ToSensor.Logs.Add(log);                            // add the log
                                    HistoricalRelativityRows.AddRange(RelativityRows); // add the log
                                }
                                // forward:
                                Datapacket forwardPacket;
                                if (RelativityRows.Count > 0)
                                {
                                    Sensor NextHopNode = nextHop.NextHopNode;
                                    forwardPacket = new Datapacket(RelayNode, NextHopNode);
                                    forwardPacket.ForwardingRandomNumber = randomGenrator.RandomeNumber;
                                    forwardPacket.SourceNodeID           = datap.SourceNodeID;
                                    forwardPacket.Distance                  = datap.Distance;
                                    forwardPacket.RoutingDistance           = datap.RoutingDistance;
                                    forwardPacket.Path                      = datap.Path;
                                    forwardPacket.Hops                      = datap.Hops;
                                    forwardPacket.UsedEnergy_Joule          = datap.UsedEnergy_Joule;
                                    forwardPacket.Delay                     = datap.Delay;
                                    forwardPacket.SourceNode                = datap.SourceNode;
                                    forwardPacket.RoutingZoneWidthCnt       = datap.RoutingZoneWidthCnt;
                                    forwardPacket.IsRandomControls          = false;
                                    forwardPacket.PrepDistanceDistCnt       = datap.PrepDistanceDistCnt;
                                    forwardPacket.TransDistanceDistCnt      = datap.TransDistanceDistCnt;
                                    forwardPacket.EnergyDistCnt             = datap.EnergyDistCnt;
                                    forwardPacket.DirectionDistCnt          = datap.DirectionDistCnt;
                                    forwardPacket.RoutingProbabilityForPath = datap.RoutingProbabilityForPath * nextHop.RoutingVariableProb;
                                    forwardPacket.PacektSequentID           = datap.PacektSequentID;
                                    RelayNode.SendData(RelayNode, NextHopNode, forwardPacket);
                                }
                            }
                            else // this sink:
                            {
                                if (RelayNode.ID == PublicParamerters.SinkNode.ID)
                                {
                                    RelayNode.PacketsList.Add(datap);
                                }
                            }
                        }
                    }
                    else
                    {
                        this.Ellipse_Communication_range.Fill = Brushes.Brown;// die out node
                        // MessageBox.Show("DeadNODE!");
                    }
                }
            }
        }