public object Clone()
 {
     PEQMessageApplication msg = new PEQMessageApplication(
         (PEQSubscriptionCriteria)_Criteria.Clone(),
         (PEQData)_Data.Clone());
     return msg;
 }
        public void GenerateEvent(double time, ILocation location)
        {
            // Overloads GenerateEvent to allow the simulation to provide the time the event occurs.
            XYDoubleLocation initalCorner = (XYDoubleLocation)field[0];  // Casting to xyLocation objects. Other
            XYDoubleLocation finalCorner = (XYDoubleLocation)field[1];     // coordinate systems are not supported.

            List<PEQNode> nodesInRange = new List<PEQNode>();

            // Generate the random center location of the event.
            eventCenter = (XYDoubleLocation)location;

            eventCenter.SetField(field);

            Notify(generateStaticReport(time, eventCenter));

            foreach (PEQNode node in nodes.NodeQueue)
            { // Find which nodes are within the effective detection area.
                if (eventCenter.Distance(node.Location) <= eventSize) // if in the event area
                    nodesInRange.Add(node);
            }

            double eventTime = 0;
            for (int i = 0; i < this.numOccurances; i++)
            {
                eventTime = time + i / this.eventFreq;

                foreach (PEQNode node in nodesInRange)
                {
                    PEQMessageApplication appMsg = new PEQMessageApplication(); // Create a new app message
                    appMsg._Data._DataID = _dataID++;
                    MessageEvent msgEvent = new MessageEvent(appMsg); // create a new message event
                    msgEvent.Referrer = node; // set the referrer to the current node

                    PEQDataInfoReport rep = new PEQDataInfoReport(node.ID, eventTime);
                    rep._Sent = 1;
                    rep._DataID = appMsg._Data._DataID;
                    Notify(rep);

                    PEQTimerInternal messageTimer = new PEQTimerInternal(appMsg, eventTime, node);
                    eventMgr.AddEvent(messageTimer);   // add the event to the Event Queue.
                }
            }

            SimulationCompleteEvent simCompleteEvent = new SimulationCompleteEvent(nodes);
            simCompleteEvent.Time = eventTime + 60; // one minute after last event occurs
            eventMgr.AddEvent(simCompleteEvent);
        }
 private void processApplicationMessage(PEQMessageApplication msg)
 {
     msg._Data._StartTime = _eventManager.CurrentClock;
     foreach (PEQTableEntryRouting routeEntry in _tableRouting)
     //foreach (PEQTableEntrySubscription subEntry in _tableSubscription)
     {
         //if ((subEntry._CriteriaType == msg._Criteria.CriteriaType)
           //  && subEntry._Valid)
         if (routeEntry._Valid)
         {
             PEQMessageNotify notifyMsg = new PEQMessageNotify(_id, _id,
                 0x00, routeEntry._SinkID, msg._Data);
             notifyMsg._nextHopCheat = _location;
             processNotify(notifyMsg);
         }
     }
 }