Esempio n. 1
0
    //use this for initialisation
    private void Start()
    {
        //set the NPC agent and its destination
        agent = GetComponent <NavMeshAgent>();
        int d = UnityEngine.Random.Range(0, wps.Length);

        crossingMask = 1 << NavMesh.GetAreaFromName("Crossing");
        agent.SetDestination(wps[d].transform.position);
        prev_location = this.agent.transform.position;

        change    = new float[2];
        change[0] = 0;
        change[1] = 0;

        // Setting espdu's settings
        espdu            = new EntityStatePdu();
        espdu.ExerciseID = 1;

        // Setting EntityID settings for this Bird
        EntityID eid = espdu.EntityID;

        eid.Site        = 0;
        eid.Application = 1;
        eid.Entity      = 2;
        EntityType entityType = espdu.EntityType;

        entityType.EntityKind = 3;      // 3 means "lifeform" (as opposed to platform, environment etc)
        entityType.Country    = 13;     // These are Aussies
        entityType.Domain     = 1;      // Land (vs air, surface, subsurface, space)
        entityType.Category   = 130;    // Civilian (Entity Kind)

        // Setting the Espdu sender's target IP
        sender = new Sender(IPAddress.Parse("192.168.1.117"), 62040, 62040);        // Configure to target IP address/ports in .json?
        Sender.StartBroadcast();
    }
        public void Demonstrate()
        {
            //start the background listener
            _connector.StartListening();

            Console.WriteLine("[RECEIVER - INFO] Started receiving example");
            //ever ongoing loop for the sake of this example
            while (true)
            {
                foreach (Pdu pdu in _connector.GetEnqueuedPDUs())
                {
                    Console.WriteLine("[RECEIVER - INFO] Received PDU with timestamp {0}", pdu.Timestamp);
                    //do with it whatever you want, but it usually requires casting to the appropiate PDU type
                    if (pdu is EntityStatePdu)
                    {
                        Console.WriteLine("[RECEIVER - INFO] Received PDU is of type EntityState.");
                        EntityStatePdu espdu = (EntityStatePdu)pdu;
                        Console.WriteLine(
                            "[RECEIVER - INFO] Entity ID:{0} Location: (x:{1}, y:{2}, z:{3})",
                            espdu.EntityID,
                            espdu.EntityLocation.X,
                            espdu.EntityLocation.Y,
                            espdu.EntityLocation.Z
                            );
                    }
                    else if (pdu is DetonationPdu)
                    {
                        DetonationPdu dpdu = (DetonationPdu)pdu;
                        Console.WriteLine("[RECEIVER - INFO] Received PDU is of type Detonation.");
                    }
                }
            }
        }
Esempio n. 3
0
    public float threshold = 5.0f; // The threshold of position change above which an Espdu is sent

    // Start is called before the first frame update
    void Start()
    {
        this.GetComponent <Rigidbody2D>().velocity = new Vector2(1, 1);
        location =
            new Vector2(this.gameObject.transform.position.x,
                        this.gameObject.transform.position.y);
        detectDistance = 5.0f;

        prev_location = this.location; // This will be reset if the DeadReckoning threshold is passed and the Espdu is sent

        // Setting espdu's settings
        espdu            = new EntityStatePdu();
        espdu.ExerciseID = 1;

        // Setting EntityID settings for this Bird
        EntityID eid = espdu.EntityID;

        eid.Site        = 0;
        eid.Application = 1;
        eid.Entity      = 2;
        EntityType entityType = espdu.EntityType;

        entityType.EntityKind = 3;  // 3 means "lifeform" (as opposed to platform, environment etc)
        entityType.Country    = 13; // These are Aussie birds ;)
        entityType.Domain     = 2;  // Air (vs land, surface, subsurface, space)
        entityType.Category   = 0;  // Other (it's a bird)
    }
Esempio n. 4
0
        static public DIS1998net.Pdu GetPDU(DISnet.Utilities.PDUTypes.PDUType1998 pdu_type)
        {
            DIS1998net.Pdu pdu = null;

            switch (pdu_type)
            {
            case PDUTypes.PDUType1998.PDU_ENTITY_STATE: pdu = new EntityStatePdu(); break;

            case PDUTypes.PDUType1998.PDU_FIRE: pdu = new FirePdu(); break;

            case PDUTypes.PDUType1998.PDU_DETONATION: pdu = new DetonationPdu(); break;

            case PDUTypes.PDUType1998.PDU_COLLISION: pdu = new CollisionPdu(); break;

            case PDUTypes.PDUType1998.PDU_SERVICE_REQUEST: pdu = new ServiceRequestPdu(); break;

            case PDUTypes.PDUType1998.PDU_RESUPPLY_OFFER: pdu = new ResupplyOfferPdu(); break;

            case PDUTypes.PDUType1998.PDU_RESUPPLY_RECEIVED: pdu = new ResupplyReceivedPdu(); break;

            case PDUTypes.PDUType1998.PDU_RESUPPLY_CANCEL: pdu = new ResupplyCancelPdu(); break;

            case PDUTypes.PDUType1998.PDU_REPAIR_COMPLETE: pdu = new RepairCompletePdu(); break;

            case PDUTypes.PDUType1998.PDU_REPAIR_RESPONSE: pdu = new RepairResponsePdu(); break;

            case PDUTypes.PDUType1998.PDU_CREATE_ENTITY: pdu = new CreateEntityPdu(); break;

            case PDUTypes.PDUType1998.PDU_REMOVE_ENTITY: pdu = new RemoveEntityPdu(); break;

            case PDUTypes.PDUType1998.PDU_START_RESUME: pdu = new StartResumePdu(); break;

            case PDUTypes.PDUType1998.PDU_ACKNOWLEDGE: pdu = new AcknowledgePdu(); break;

            case PDUTypes.PDUType1998.PDU_ACTION_REQUEST: pdu = new ActionRequestPdu(); break;

            case PDUTypes.PDUType1998.PDU_ACTION_RESPONSE: pdu = new ActionResponsePdu(); break;

            case PDUTypes.PDUType1998.PDU_DATA_QUERY: pdu = new DataQueryPdu(); break;

            case PDUTypes.PDUType1998.PDU_SET_DATA: pdu = new SetDataPdu(); break;

            case PDUTypes.PDUType1998.PDU_EVENT_REPORT: pdu = new EventReportPdu(); break;

            case PDUTypes.PDUType1998.PDU_COMMENT: pdu = new CommentPdu(); break;

            case PDUTypes.PDUType1998.PDU_STOP_FREEZE: pdu = new StopFreezePdu(); break;

            case PDUTypes.PDUType1998.PDU_SIGNAL: pdu = new SignalPdu(); break;

            case PDUTypes.PDUType1998.PDU_TRANSMITTER: pdu = new TransmitterPdu(); break;
            }

            return(pdu);
        }
    public void Update()
    {
        if (pduQueue.Count > 0)
        {
            lock (((ICollection)pduQueue).SyncRoot)
            {
                while (pduQueue.Count > 0)
                {
                    Pdu pdu = this.pduQueue.Dequeue();

                    switch ((PduType)pdu.PduType)
                    {
                    case PduType.EntityState:
                        EntityStatePdu entityStatePdu = (EntityStatePdu)pdu;
                        if (stevec % 500 == 0)
                        {
                            Debug.Log("\tPREMIKANJE: EntityID: " + entityStatePdu.EntityID + " EntityState: " + stevec + " Queue: " + pduQueue.Count);
                        }
                        ChangeEntityState(entityStatePdu);
                        break;

                    case PduType.Fire:
                        FirePdu firePdu = (FirePdu)pdu;
                        SendDisEvent(firePdu);
                        break;

                    case PduType.Detonation:
                        DetonationPdu detonationPdu = (DetonationPdu)pdu;
                        SendDisEvent(detonationPdu);
                        break;

                    case PduType.Collision:
                        CollisionPdu collisionPdu = (CollisionPdu)pdu;
                        Debug.Log("\tCollision: " + collisionPdu.PduType + " " + stevec);
                        break;

                    case PduType.IFF_ATC_NAVAIDS:
                        Debug.Log("\tIFF_ATC_NAVAIDS");
                        break;

                    default:
                        //Debug.Log("\tOTHER: " + newPdu.PduType + " " + stevec+" Queue: "+queue.Count);
                        //Debug.Log ("\t\t"+newPdu.Length);
                        break;
                    }
                }
            }
        }
    }
Esempio n. 6
0
        public void Demonstrate()
        {
            Console.WriteLine("[SENDER - INFO] Started sending example");
            //Marnehuizen
            double lat = 53.3889139;
            double lon = 6.263677777777778;

            EntityStatePdu espdu = new EntityStatePdu();

            espdu.ExerciseID = 1;

            EntityID eid = espdu.EntityID;

            eid.Site        = 0;
            eid.Application = 1;
            eid.Entity      = 2;

            EntityType entityType = espdu.EntityType;

            entityType.Country     = (ushort)Country.Netherlands; // NL
            entityType.EntityKind  = (byte)EntityKind.LifeForm;   // Life form (vs platform, munition, sensor, etc.)
            entityType.Domain      = (byte)Platform.Land;         // Land (vs air, surface, subsurface, space)
            entityType.Category    = 0;                           //empty
            entityType.Subcategory = 1;                           // Dismounted
            entityType.Specific    = 5;                           //carrying an assault rifle
            entityType.Extra       = 1;                           //Moving alone

            while (true)
            {
                lat += (1d / 11132000);
                lon += (1d / 40075) * Math.Cos(lat) / 360d;
                double[] disCoordinates = CoordinateConversions.getXYZfromLatLonDegrees(lat, lon, 0.0);

                Console.WriteLine("[SENDER - INFO] Entity is now at (lat:{0}, long:{1}", lat, lon);

                Vector3Double location = espdu.EntityLocation;
                location.X      = disCoordinates[0];
                location.Y      = disCoordinates[1];
                location.Z      = disCoordinates[2];
                espdu.Timestamp = DisTime.DisRelativeTimestamp;

                //send the constructed PDU to the specified multicast group
                _connector.sendPDU(espdu, MulticastGroup.Parse("224.5.5.5"));
                Console.WriteLine("[SENDER - INFO] PDU broadcasted");

                Thread.Sleep(15000);
            }
        }
    private void ChangeEntityState(EntityStatePdu entityStatePdu)
    {
        int entityID     = entityStatePdu.EntityID.Entity;
        int entityDamage = (entityStatePdu.EntityAppearance & 24) >> 3;

        Vector3D geographicalCoordinates = CalculationUtil.ConvertToGeographicalCoordinates(
            new Vector3D(entityStatePdu.EntityLocation.X, entityStatePdu.EntityLocation.Y, entityStatePdu.EntityLocation.Z));
        Vector3 worldCoordinates = CalculationUtil.ConvertToWorldCoordinates(geographicalCoordinates, entityStatePdu.EntityType.Domain, layerMask_terrain);

        // calculating velocity and setting movement
        Vector3D velocityVec3D = new Vector3D(entityStatePdu.EntityLinearVelocity.X, entityStatePdu.EntityLinearVelocity.Y, entityStatePdu.EntityLinearVelocity.Z);

        if (velocityVec3D.x != 0 || velocityVec3D.y != 0 || velocityVec3D.z != 0)
        {
            Vector3D velocityCoordinates = CalculationUtil.ConvertToGeographicalCoordinates(new Vector3D(
                                                                                                entityStatePdu.EntityLocation.X + entityStatePdu.EntityLinearVelocity.X,
                                                                                                entityStatePdu.EntityLocation.Y + entityStatePdu.EntityLinearVelocity.Y,
                                                                                                entityStatePdu.EntityLocation.Z + entityStatePdu.EntityLinearVelocity.Z));

            Vector3 worldCoordinatesVelocity = CalculationUtil.ConvertToWorldCoordinates(velocityCoordinates, entityStatePdu.EntityType.Domain, layerMask_terrain);

            Vector3 lookAtVector = (new Vector3(worldCoordinatesVelocity.x, 0, worldCoordinatesVelocity.z) -
                                    new Vector3(worldCoordinates.x, 0, worldCoordinates.z)).normalized;

            float distance = Vector3.Distance(
                new Vector3(worldCoordinates.x, 0, worldCoordinates.z),
                new Vector3(worldCoordinatesVelocity.x, 0, worldCoordinatesVelocity.z));

            this.entityHandlerScript.SetEntityMovementAndDamage(entityID, true, lookAtVector, distance, entityDamage, geographicalCoordinates, worldCoordinates, entityStatePdu.EntityType.Domain);
        }
        // else rotate entity based on previous location
        else
        {
            this.entityHandlerScript.SetEntityMovementAndDamage(entityID, false, Vector3.zero, 0, entityDamage, geographicalCoordinates, worldCoordinates, entityStatePdu.EntityType.Domain);
        }
    }
Esempio n. 8
0
        /// <summary>
        /// Used to unmarshal data back into the correct PDU type.
        /// </summary>
        /// <param name="pduType">PDU type</param>
        /// <param name="ds">Datastream which contains the raw packet and Endian Type</param>
        /// <remarks>Added by PES to work with Mobile.</remarks>
        /// <returns>The PDU instance.</returns>
        public static Pdu UnmarshalRawPdu(PduType pduType, DataInputStream ds)
        {
            var pdu = new Pdu();

            switch (pduType)
            {
            case PduType.EntityState:
                pdu = new EntityStatePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.Fire:
                pdu = new FirePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.Detonation:
                pdu = new DetonationPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.Collision:
                pdu = new CollisionPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.ServiceRequest:
                pdu = new ServiceRequestPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.ResupplyOffer:
                pdu = new ResupplyOfferPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.ResupplyReceived:
                pdu = new ResupplyReceivedPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.ResupplyCancel:
                pdu = new ResupplyCancelPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.RepairComplete:
                pdu = new RepairCompletePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.RepairResponse:
                pdu = new RepairResponsePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.CreateEntity:
                pdu = new CreateEntityPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.RemoveEntity:
                pdu = new RemoveEntityPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.StartResume:
                pdu = new StartResumePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.Acknowledge:
                pdu = new AcknowledgePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.ActionRequest:
                pdu = new ActionRequestPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.ActionResponse:
                pdu = new ActionResponsePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.DataQuery:
                pdu = new DataQueryPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.SetData:
                pdu = new SetDataPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.EventReport:
                pdu = new EventReportPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.Comment:
                pdu = new CommentPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.StopFreeze:
                pdu = new StopFreezePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.Signal:
                pdu = new SignalPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.Transmitter:
                pdu = new TransmitterPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.ElectromagneticEmission:
                pdu = new ElectronicEmissionsPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.Designator:
                pdu = new DesignatorPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.Receiver:
                pdu = new ReceiverPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.IFF_ATC_NAVAIDS:
                pdu = new IffAtcNavAidsLayer1Pdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.UnderwaterAcoustic:
                pdu = new UaPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.SupplementalEmissionEntityState:
                pdu = new SeesPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.IntercomSignal:
                pdu = new IntercomSignalPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.IntercomControl:
                pdu = new IntercomControlPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.AggregateState:
                pdu = new AggregateStatePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.IsGroupOf:
                pdu = new IsGroupOfPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.TransferControl:
                pdu = new TransferControlRequestPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.IsPartOf:
                pdu = new IsPartOfPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.MinefieldState:
                pdu = new MinefieldStatePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.MinefieldQuery:
                pdu = new MinefieldQueryPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.MinefieldData:
                pdu = new MinefieldDataPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.MinefieldResponseNAK:
                pdu = new MinefieldResponseNackPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.EnvironmentalProcess:
                pdu = new EnvironmentalProcessPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.GriddedData:
                pdu = new GriddedDataPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.PointObjectState:
                pdu = new PointObjectStatePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.LinearObjectState:
                pdu = new LinearObjectStatePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.ArealObjectState:
                pdu = new ArealObjectStatePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.TSPI:
                throw new NotSupportedException();

            case PduType.Appearance:
                throw new NotSupportedException();

            case PduType.ArticulatedParts:
                throw new NotSupportedException();

            case PduType.LEFire:
                throw new NotSupportedException();

            case PduType.LEDetonation:
                throw new NotSupportedException();

            case PduType.CreateEntityR:
                pdu = new CreateEntityReliablePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.RemoveEntityR:
                pdu = new RemoveEntityReliablePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.StartResumeR:
                pdu = new StartResumeReliablePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.StopFreezeR:
                pdu = new StopFreezeReliablePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.AcknowledgeR:
                pdu = new AcknowledgeReliablePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.ActionRequestR:
                pdu = new ActionRequestReliablePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.ActionResponseR:
                pdu = new ActionResponseReliablePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.DataQueryR:
                pdu = new DataQueryReliablePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.SetDataR:
                pdu = new SetDataReliablePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.DataR:
                pdu = new DataReliablePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.EventReportR:
                pdu = new EventReportReliablePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.CommentR:
                pdu = new CommentReliablePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.RecordR:
                pdu = new RecordQueryReliablePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.SetRecordR:
                pdu = new SetRecordReliablePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.RecordQueryR:
                pdu = new RecordQueryReliablePdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.CollisionElastic:
                pdu = new CollisionElasticPdu();
                pdu.Unmarshal(ds);
                break;

            case PduType.EntityStateUpdate:
                pdu = new EntityStateUpdatePdu();
                pdu.Unmarshal(ds);
                break;
            }

            return(pdu);
        }
Esempio n. 9
0
        /// <summary>
        /// Used to unmarshal data back into the correct PDU type.
        /// </summary>
        /// <param name="pduType">PDU type</param>
        /// <param name="ds">Datastream which contains the raw packet and Endian Type</param>
        /// <remarks>Added by PES to work with Mobile.</remarks>
        /// <returns>The PDU instance.</returns>
        public static Pdu UnmarshalRawPdu(PduType pduType, DataInputStream ds)
        {
            Pdu pdu = new Pdu();

            switch (pduType)
            {
            case PduType.EntityState:
                EntityStatePdu entityStatePdu = new EntityStatePdu();
                entityStatePdu.Unmarshal(ds);
                pdu = (Pdu)entityStatePdu;
                break;

            case PduType.Fire:
                FirePdu firePdu = new FirePdu();
                firePdu.Unmarshal(ds);
                pdu = (Pdu)firePdu;
                break;

            case PduType.Detonation:
                DetonationPdu detonationPdu = new DetonationPdu();
                detonationPdu.Unmarshal(ds);
                pdu = (Pdu)detonationPdu;
                break;

            case PduType.Collision:
                CollisionPdu collisionPdu = new CollisionPdu();
                collisionPdu.Unmarshal(ds);
                pdu = (Pdu)collisionPdu;
                break;

            case PduType.ServiceRequest:
                ServiceRequestPdu serviceRequestPdu = new ServiceRequestPdu();
                serviceRequestPdu.Unmarshal(ds);
                pdu = (Pdu)serviceRequestPdu;
                break;

            case PduType.ResupplyOffer:
                ResupplyOfferPdu resupplyOfferPdu = new ResupplyOfferPdu();
                resupplyOfferPdu.Unmarshal(ds);
                pdu = (Pdu)resupplyOfferPdu;
                break;

            case PduType.ResupplyReceived:
                ResupplyReceivedPdu resupplyReceivedPdu = new ResupplyReceivedPdu();
                resupplyReceivedPdu.Unmarshal(ds);
                pdu = (Pdu)resupplyReceivedPdu;
                break;

            case PduType.ResupplyCancel:
                ResupplyCancelPdu resupplyCancelPdu = new ResupplyCancelPdu();
                resupplyCancelPdu.Unmarshal(ds);
                pdu = (Pdu)resupplyCancelPdu;
                break;

            case PduType.RepairComplete:
                RepairCompletePdu repairCompletePdu = new RepairCompletePdu();
                repairCompletePdu.Unmarshal(ds);
                pdu = (Pdu)repairCompletePdu;
                break;

            case PduType.RepairResponse:
                RepairResponsePdu repairResponsePdu = new RepairResponsePdu();
                repairResponsePdu.Unmarshal(ds);
                pdu = (Pdu)repairResponsePdu;
                break;

            case PduType.CreateEntity:
                CreateEntityPdu createEntityPdu = new CreateEntityPdu();
                createEntityPdu.Unmarshal(ds);
                pdu = (Pdu)createEntityPdu;
                break;

            case PduType.RemoveEntity:
                RemoveEntityPdu removeEntityPdu = new RemoveEntityPdu();
                removeEntityPdu.Unmarshal(ds);
                pdu = (Pdu)removeEntityPdu;
                break;

            case PduType.StartResume:
                StartResumePdu startResumePdu = new StartResumePdu();
                startResumePdu.Unmarshal(ds);
                pdu = (Pdu)startResumePdu;
                break;

            case PduType.Acknowledge:
                AcknowledgePdu acknowledgePdu = new AcknowledgePdu();
                acknowledgePdu.Unmarshal(ds);
                pdu = (Pdu)acknowledgePdu;
                break;

            case PduType.ActionRequest:
                ActionRequestPdu actionRequestPdu = new ActionRequestPdu();
                actionRequestPdu.Unmarshal(ds);
                pdu = (Pdu)actionRequestPdu;
                break;

            case PduType.ActionResponse:
                ActionResponsePdu actionResponsePdu = new ActionResponsePdu();
                actionResponsePdu.Unmarshal(ds);
                pdu = (Pdu)actionResponsePdu;
                break;

            case PduType.DataQuery:
                DataQueryPdu dataQueryPdu = new DataQueryPdu();
                dataQueryPdu.Unmarshal(ds);
                pdu = (Pdu)dataQueryPdu;
                break;

            case PduType.SetData:
                SetDataPdu setDataPdu = new SetDataPdu();
                setDataPdu.Unmarshal(ds);
                pdu = (Pdu)setDataPdu;
                break;

            case PduType.EventReport:
                EventReportPdu eventReportPdu = new EventReportPdu();
                eventReportPdu.Unmarshal(ds);
                pdu = (Pdu)eventReportPdu;
                break;

            case PduType.Comment:
                CommentPdu commentPdu = new CommentPdu();
                commentPdu.Unmarshal(ds);
                pdu = (Pdu)commentPdu;
                break;

            case PduType.StopFreeze:
                StopFreezePdu stopFreezePdu = new StopFreezePdu();
                stopFreezePdu.Unmarshal(ds);
                pdu = (Pdu)stopFreezePdu;
                break;

            case PduType.Signal:
                SignalPdu signalPdu = new SignalPdu();
                signalPdu.Unmarshal(ds);
                pdu = (Pdu)signalPdu;
                break;

            case PduType.Transmitter:
                TransmitterPdu transmitterPdu = new TransmitterPdu();
                transmitterPdu.Unmarshal(ds);
                pdu = (Pdu)transmitterPdu;
                break;
            }

            return(pdu);
        }
Esempio n. 10
0
        /// <summary>
        /// Used to unmarshal data back into the correct PDU type.
        /// </summary>
        /// <param name="pduType">PDU type</param>
        /// <param name="ds">Datastream which contains the raw packet and Endian Type</param>
        /// <remarks>Added by PES to work with Mobile.</remarks>
        /// <returns>The PDU instance.</returns>
        public static Pdu UnmarshalRawPdu(PduType pduType, DataInputStream ds)
        {
            Pdu pdu = new Pdu();

            switch (pduType)
            {
                case PduType.EntityState:
                    EntityStatePdu entityStatePdu = new EntityStatePdu();
                    entityStatePdu.Unmarshal(ds);
                    pdu = (Pdu)entityStatePdu;
                    break;
                case PduType.Fire:
                    FirePdu firePdu = new FirePdu();
                    firePdu.Unmarshal(ds);
                    pdu = (Pdu)firePdu;
                    break;
                case PduType.Detonation:
                    DetonationPdu detonationPdu = new DetonationPdu();
                    detonationPdu.Unmarshal(ds);
                    pdu = (Pdu)detonationPdu;
                    break;
                case PduType.Collision:
                    CollisionPdu collisionPdu = new CollisionPdu();
                    collisionPdu.Unmarshal(ds);
                    pdu = (Pdu)collisionPdu;
                    break;
                case PduType.ServiceRequest:
                    ServiceRequestPdu serviceRequestPdu = new ServiceRequestPdu();
                    serviceRequestPdu.Unmarshal(ds);
                    pdu = (Pdu)serviceRequestPdu;
                    break;
                case PduType.ResupplyOffer:
                    ResupplyOfferPdu resupplyOfferPdu = new ResupplyOfferPdu();
                    resupplyOfferPdu.Unmarshal(ds);
                    pdu = (Pdu)resupplyOfferPdu;
                    break;
                case PduType.ResupplyReceived:
                    ResupplyReceivedPdu resupplyReceivedPdu = new ResupplyReceivedPdu();
                    resupplyReceivedPdu.Unmarshal(ds);
                    pdu = (Pdu)resupplyReceivedPdu;
                    break;
                case PduType.ResupplyCancel:
                    ResupplyCancelPdu resupplyCancelPdu = new ResupplyCancelPdu();
                    resupplyCancelPdu.Unmarshal(ds);
                    pdu = (Pdu)resupplyCancelPdu;
                    break;
                case PduType.RepairComplete:
                    RepairCompletePdu repairCompletePdu = new RepairCompletePdu();
                    repairCompletePdu.Unmarshal(ds);
                    pdu = (Pdu)repairCompletePdu;
                    break;
                case PduType.RepairResponse:
                    RepairResponsePdu repairResponsePdu = new RepairResponsePdu();
                    repairResponsePdu.Unmarshal(ds);
                    pdu = (Pdu)repairResponsePdu;
                    break;
                case PduType.CreateEntity:
                    CreateEntityPdu createEntityPdu = new CreateEntityPdu();
                    createEntityPdu.Unmarshal(ds);
                    pdu = (Pdu)createEntityPdu;
                    break;
                case PduType.RemoveEntity:
                    RemoveEntityPdu removeEntityPdu = new RemoveEntityPdu();
                    removeEntityPdu.Unmarshal(ds);
                    pdu = (Pdu)removeEntityPdu;
                    break;
                case PduType.StartResume:
                    StartResumePdu startResumePdu = new StartResumePdu();
                    startResumePdu.Unmarshal(ds);
                    pdu = (Pdu)startResumePdu;
                    break;
                case PduType.Acknowledge:
                    AcknowledgePdu acknowledgePdu = new AcknowledgePdu();
                    acknowledgePdu.Unmarshal(ds);
                    pdu = (Pdu)acknowledgePdu;
                    break;
                case PduType.ActionRequest:
                    ActionRequestPdu actionRequestPdu = new ActionRequestPdu();
                    actionRequestPdu.Unmarshal(ds);
                    pdu = (Pdu)actionRequestPdu;
                    break;
                case PduType.ActionResponse:
                    ActionResponsePdu actionResponsePdu = new ActionResponsePdu();
                    actionResponsePdu.Unmarshal(ds);
                    pdu = (Pdu)actionResponsePdu;
                    break;
                case PduType.DataQuery:
                    DataQueryPdu dataQueryPdu = new DataQueryPdu();
                    dataQueryPdu.Unmarshal(ds);
                    pdu = (Pdu)dataQueryPdu;
                    break;
                case PduType.SetData:
                    SetDataPdu setDataPdu = new SetDataPdu();
                    setDataPdu.Unmarshal(ds);
                    pdu = (Pdu)setDataPdu;
                    break;
                case PduType.EventReport:
                    EventReportPdu eventReportPdu = new EventReportPdu();
                    eventReportPdu.Unmarshal(ds);
                    pdu = (Pdu)eventReportPdu;
                    break;
                case PduType.Comment:
                    CommentPdu commentPdu = new CommentPdu();
                    commentPdu.Unmarshal(ds);
                    pdu = (Pdu)commentPdu;
                    break;
                case PduType.StopFreeze:
                    StopFreezePdu stopFreezePdu = new StopFreezePdu();
                    stopFreezePdu.Unmarshal(ds);
                    pdu = (Pdu)stopFreezePdu;
                    break;
                case PduType.Signal:
                    SignalPdu signalPdu = new SignalPdu();
                    signalPdu.Unmarshal(ds);
                    pdu = (Pdu)signalPdu;
                    break;
                case PduType.Transmitter:
                    TransmitterPdu transmitterPdu = new TransmitterPdu();
                    transmitterPdu.Unmarshal(ds);
                    pdu = (Pdu)transmitterPdu;
                    break;
            }

            return pdu;
        }
Esempio n. 11
0
        /// <summary>
        /// Creates the PDU.
        /// </summary>
        /// <param name="type">The type of PDU to be created.</param>
        /// <returns>Returns the corresponding PDU instance or null if PduType.Other is specified.</returns>
        /// <exception cref="NotImplementedException">if the PDU type specified in parameter is not supported.</exception>
        public static IPdu CreatePdu(PduType type)
        {
            IPdu pdu = null;

            switch (type)
            {
                case PduType.Other:
                    pdu = new Pdu();
                    break;
                case PduType.EntityState:
                    pdu = new EntityStatePdu();
                    break;
                case PduType.Fire:
                    pdu = new FirePdu();
                    break;
                case PduType.Detonation:
                    pdu = new DetonationPdu();
                    break;
                case PduType.Collision:
                    pdu = new CollisionPdu();
                    break;
                case PduType.ServiceRequest:
                    pdu = new ServiceRequestPdu();
                    break;
                case PduType.ResupplyOffer:
                    pdu = new ResupplyOfferPdu();
                    break;
                case PduType.ResupplyReceived:
                    pdu = new ResupplyReceivedPdu();
                    break;
                case PduType.ResupplyCancel:
                    pdu = new ResupplyCancelPdu();
                    break;
                case PduType.RepairComplete:
                    pdu = new RepairCompletePdu();
                    break;
                case PduType.RepairResponse:
                    pdu = new RepairResponsePdu();
                    break;
                case PduType.CreateEntity:
                    pdu = new CreateEntityPdu();
                    break;
                case PduType.RemoveEntity:
                    pdu = new RemoveEntityPdu();
                    break;
                case PduType.StartResume:
                    pdu = new StartResumePdu();
                    break;
                case PduType.StopFreeze:
                    pdu = new StopFreezePdu();
                    break;
                case PduType.Acknowledge:
                    pdu = new AcknowledgePdu();
                    break;
                case PduType.ActionRequest:
                    pdu = new ActionRequestPdu();
                    break;
                case PduType.ActionResponse:
                    pdu = new ActionResponsePdu();
                    break;
                case PduType.DataQuery:
                    pdu = new DataQueryPdu();
                    break;
                case PduType.SetData:
                    pdu = new SetDataPdu();
                    break;
                case PduType.Data:
                    pdu = new DataPdu();
                    break;
                case PduType.EventReport:
                    pdu = new EventReportPdu();
                    break;
                case PduType.Comment:
                    pdu = new CommentPdu();
                    break;
                case PduType.ElectromagneticEmission:
                    throw new NotImplementedException();
                case PduType.Designator:
                    pdu = new DesignatorPdu();
                    break;
                case PduType.Transmitter:
                    pdu = new TransmitterPdu();
                    break;
                case PduType.Signal:
                    pdu = new SignalPdu();
                    break;
                case PduType.Receiver:
                    pdu = new ReceiverPdu();
                    break;
                default:
                    throw new NotImplementedException();
            }

            return pdu;
        }
Esempio n. 12
0
        public static void Main(string[] args)
        {
            mcastAddress  = IPAddress.Parse("239.1.2.3");
            mcastPort     = 62040;
            broadcastPort = 62040;            //3000 for DisMapper default
            var espdu = new EntityStatePdu(); //Could use factory but easier this way

            //Alcatraz
            const double lat = 37.827;
            double       lon = -122.425;

            // Configure socket.
            //JoinMulticast();   //Used to talk to C# receiver.  No need to connect as we are just sending multicast
            //StartMulticast();  //Least preffered
            StartBroadcast();      //Used for DisMapper

            //Setup EntityState PDU
            espdu.ExerciseID = 1;
            var eid = espdu.EntityID;

            eid.Site        = 0;
            eid.Application = 1;
            eid.Entity      = 2;
            // Set the entity type. SISO has a big list of enumerations, so that by
            // specifying various numbers we can say this is an M1A2 American tank,
            // the USS Enterprise, and so on. We'll make this a tank. There is a
            // separate project elsehwhere in this project that implements DIS
            // enumerations in C++ and Java, but to keep things simple we just use
            // numbers here.
            var entityType = espdu.EntityType;

            entityType.EntityKind  = 1;     // Platform (vs lifeform, munition, sensor, etc.)
            entityType.Country     = 255;   // USA
            entityType.Domain      = 1;     // Land (vs air, surface, subsurface, space)
            entityType.Category    = 1;     // Tank
            entityType.Subcategory = 1;     // M1 Abrams
            entityType.Specific    = 3;     // M1A2 Abrams

            for (int i = 0; i < 100; i++)
            {
                lon += (i / 1000.0);

                double[] disCoordinates = CoordinateConversions.getXYZfromLatLonDegrees(lat, lon, 0.0);

                var location = espdu.EntityLocation;
                location.X      = disCoordinates[0];
                location.Y      = disCoordinates[1];
                location.Z      = disCoordinates[2];
                espdu.Timestamp = DisTime.DisRelativeTimestamp;

                //Prepare output
                var dos = new DataOutputStream(Endian.Big);
                espdu.MarshalAutoLengthSet(dos);

                // Transmit broadcast messages
                SendMessages(dos.ConvertToBytes());
                Console.Write("Message sent with TimeStamp [{0}] Time Of[{1}]", espdu.Timestamp, espdu.Timestamp >> 1);

                //Thread.Sleep(1000);
                Console.Write("Hit Enter for Next PDU.  Ctrl-C to Exit");
                Console.ReadLine();
            }

            mcastSocket.Close();
        }
Esempio n. 13
0
        /// <summary>
        /// Decodes a PDU instance to a JSON string.
        /// </summary>
        /// <param name="pdu"><see cref="DIS.Dis1998.Pdu"/> instance to be decoded</param>
        /// <param name="detailed">Whether or not to add a details field where possible.</param>
        /// <returns></returns>
        public static string Decode(Pdu pdu, bool detailed)
        {
            if (pdu is EntityStatePdu && detailed)
            {
                EntityStatePdu espdu = (EntityStatePdu)pdu;
                EntityID       eid   = espdu.EntityID;
                EntityType     et    = espdu.EntityType;
                EntityType     altet = espdu.AlternativeEntityType;

                return(JsonConvert.SerializeObject(new
                {
                    EntityID = espdu.EntityID,
                    ForceID = espdu.ForceId,
                    NumberOfArticulationParameters = espdu.NumberOfArticulationParameters,
                    EntityType = new
                    {
                        EntityKind = new
                        {
                            Value = et.EntityKind,
                            Details = Enumerations.GetPlatform(et.EntityKind)
                        },
                        Domain = new
                        {
                            Value = et.Domain,
                            Details = Enumerations.GetDomain(et.Domain)
                        },
                        Country = new
                        {
                            Value = et.Country,
                            Details = Enumerations.GetCountry(et.Country),
                        },
                        Category = new
                        {
                            Value = et.Category,
                            Details = Enumerations.GetCategory(et.EntityKind, et.Domain, et.Category),
                        },
                        Subcategory = new
                        {
                            Value = et.Subcategory,
                            //Details = Enumerations.GetSubcategory(et.Subcategory, et.Domain, et.Category),
                        },
                        Specific = new
                        {
                            Value = et.Subcategory,
                            //Details = Enumerations.GetSpecific(et.Specific, et.Domain, et.Category),
                        },
                        Extra = new
                        {
                            Value = et.Extra,
                            //Details = Enumerations.GetExtra(et.Extra, et.Domain, et.Category),
                        },
                    },
                    AlternativeEntityType = new
                    {
                        EntityKind = new
                        {
                            Value = et.EntityKind,
                            Details = Enumerations.GetPlatform(altet.EntityKind)
                        },
                        Domain = new
                        {
                            Value = et.Domain,
                            Details = Enumerations.GetDomain(altet.Domain)
                        },
                        Country = new
                        {
                            Value = et.Country,
                            Details = Enumerations.GetCountry(altet.Country),
                        },
                        Category = new
                        {
                            Value = et.Category,
                            Details = Enumerations.GetCategory(altet.EntityKind, altet.Domain, altet.Category),
                        },
                        Subcategory = new
                        {
                            Value = et.Subcategory,
                            //Details = Enumerations.GetSubcategory(altet.Subcategory, altet.Domain, altet.Category),
                        },
                        Specific = new
                        {
                            Value = et.Subcategory,
                            //Details = Enumerations.GetSpecific(altet.Specific, altet.Domain, altet.Category),
                        },
                        Extra = new
                        {
                            Value = et.Extra,
                            //Details = Enumerations.GetExtra(altet.Extra, altet.Domain, altet.Category),
                        },
                    },
                    EntityLinearVelocity = espdu.EntityLinearVelocity,
                    EntityLocation = espdu.EntityLocation,
                    EntityOrientation = espdu.EntityOrientation,
                    EntityAppearance = espdu.EntityAppearance,
                    DeadReckoningParameters = espdu.DeadReckoningParameters,
                    Marking = espdu.Marking,
                    Capabilities = espdu.Capabilities,
                    ArticulationParameters = espdu.ArticulationParameters,
                    ProtocolVersion = espdu.ProtocolVersion,
                    ExerciseID = espdu.ExerciseID,
                    PduType = espdu.PduType,
                    ProtocolFamily = espdu.ProtocolFamily,
                    Timestamp = espdu.Timestamp,
                    Length = espdu.Length,
                    Padding = espdu.Padding
                }, Formatting.Indented));
            }
            else
            {
                return(JsonConvert.SerializeObject(pdu, Formatting.Indented));
            }
        }
Esempio n. 14
0
        /// <summary>
        /// Creates the PDU.
        /// </summary>
        /// <param name="type">The type of PDU to be created.</param>
        /// <returns>Returns the corresponding PDU instance or null if PduType.Other is specified.</returns>
        /// <exception cref="NotImplementedException">if the PDU type specified in parameter is not supported.</exception>
        public static IPdu CreatePdu(PduType type)
        {
            IPdu pdu = null;

            switch (type)
            {
                case PduType.Other:
                    pdu = new Pdu();
                    break;
                case PduType.EntityState:
                    pdu = new EntityStatePdu();
                    break;
                case PduType.Fire:
                    pdu = new FirePdu();
                    break;
                case PduType.Detonation:
                    pdu = new DetonationPdu();
                    break;
                case PduType.Collision:
                    pdu = new CollisionPdu();
                    break;
                case PduType.ServiceRequest:
                    pdu = new ServiceRequestPdu();
                    break;
                case PduType.ResupplyOffer:
                    pdu = new ResupplyOfferPdu();
                    break;
                case PduType.ResupplyReceived:
                    pdu = new ResupplyReceivedPdu();
                    break;
                case PduType.ResupplyCancel:
                    pdu = new ResupplyCancelPdu();
                    break;
                case PduType.RepairComplete:
                    pdu = new RepairCompletePdu();
                    break;
                case PduType.RepairResponse:
                    pdu = new RepairResponsePdu();
                    break;
                case PduType.CreateEntity:
                    pdu = new CreateEntityPdu();
                    break;
                case PduType.RemoveEntity:
                    pdu = new RemoveEntityPdu();
                    break;
                case PduType.StartResume:
                    pdu = new StartResumePdu();
                    break;
                case PduType.StopFreeze:
                    pdu = new StopFreezePdu();
                    break;
                case PduType.Acknowledge:
                    pdu = new AcknowledgePdu();
                    break;
                case PduType.ActionRequest:
                    pdu = new ActionRequestPdu();
                    break;
                case PduType.ActionResponse:
                    pdu = new ActionResponsePdu();
                    break;
                case PduType.DataQuery:
                    pdu = new DataQueryPdu();
                    break;
                case PduType.SetData:
                    pdu = new SetDataPdu();
                    break;
                case PduType.Data:
                    pdu = new DataPdu();
                    break;
                case PduType.EventReport:
                    pdu = new EventReportPdu();
                    break;
                case PduType.Comment:
                    pdu = new CommentPdu();
                    break;
                case PduType.ElectromagneticEmission:
                    pdu = new ElectronicEmissionsPdu();
                    break;
                case PduType.Designator:
                    pdu = new DesignatorPdu();
                    break;
                case PduType.Transmitter:
                    pdu = new TransmitterPdu();
                    break;
                case PduType.Signal:
                    pdu = new SignalPdu();
                    break;
                case PduType.Receiver:
                    pdu = new ReceiverPdu();
                    break;
                case PduType.IFF_ATC_NAVAIDS:
                    pdu = new IffAtcNavAidsLayer1Pdu();
                    break;
                case PduType.UnderwaterAcoustic:
                    pdu = new UaPdu();
                    break;
                case PduType.SupplementalEmissionEntityState:
                    pdu = new SeesPdu();
                    break;
                case PduType.IntercomSignal:
                    pdu = new IntercomSignalPdu();
                    break;
                case PduType.IntercomControl:
                    pdu = new IntercomControlPdu();
                    break;
                case PduType.AggregateState:
                    pdu = new AggregateStatePdu();
                    break;
                case PduType.IsGroupOf:
                    pdu = new IsGroupOfPdu();
                    break;
                case PduType.TransferControl:
                    pdu = new TransferControlRequestPdu();
                    break;
                case PduType.IsPartOf:
                    pdu = new IsPartOfPdu();
                    break;
                case PduType.MinefieldState:
                    pdu = new MinefieldStatePdu();
                    break;
                case PduType.MinefieldQuery:
                    pdu = new MinefieldQueryPdu();
                    break;
                case PduType.MinefieldData:
                    pdu = new MinefieldDataPdu();
                    break;
                case PduType.MinefieldResponseNAK:
                    pdu = new MinefieldResponseNackPdu();
                    break;
                case PduType.EnvironmentalProcess:
                    pdu = new EnvironmentalProcessPdu();
                    break;
                case PduType.GriddedData:
                    pdu = new GriddedDataPdu();
                    break;
                case PduType.PointObjectState:
                    pdu = new PointObjectStatePdu();
                    break;
                case PduType.LinearObjectState:
                    pdu = new LinearObjectStatePdu();
                    break;
                case PduType.ArealObjectState:
                    pdu = new ArealObjectStatePdu();
                    break;
                case PduType.TSPI:
                    throw new NotImplementedException();
                case PduType.Appearance:
                    throw new NotImplementedException();
                case PduType.ArticulatedParts:
                    throw new NotImplementedException();
                case PduType.LEFire:
                    throw new NotImplementedException();
                case PduType.LEDetonation:
                    throw new NotImplementedException();
                case PduType.CreateEntityR:
                    pdu = new CreateEntityReliablePdu();
                    break;
                case PduType.RemoveEntityR:
                    pdu = new RemoveEntityReliablePdu();
                    break;
                case PduType.StartResumeR:
                    pdu = new StartResumeReliablePdu();
                    break;
                case PduType.StopFreezeR:
                    pdu = new StopFreezeReliablePdu();
                    break;
                case PduType.AcknowledgeR:
                    pdu = new AcknowledgeReliablePdu();
                    break;
                case PduType.ActionRequestR:
                    pdu = new ActionRequestReliablePdu();
                    break;
                case PduType.ActionResponseR:
                    pdu = new ActionResponseReliablePdu();
                    break;
                case PduType.DataQueryR:
                    pdu = new DataQueryReliablePdu();
                    break;
                case PduType.SetDataR:
                    pdu = new SetDataReliablePdu();
                    break;
                case PduType.DataR:
                    pdu = new DataReliablePdu();
                    break;
                case PduType.EventReportR:
                    pdu = new EventReportReliablePdu();
                    break;
                case PduType.CommentR:
                    pdu = new CommentReliablePdu();
                    break;
                case PduType.RecordR:
                    pdu = new RecordQueryReliablePdu();
                    break;
                case PduType.SetRecordR:
                    pdu = new SetRecordReliablePdu();
                    break;
                case PduType.RecordQueryR:
                    pdu = new RecordQueryReliablePdu();
                    break;
                case PduType.CollisionElastic:
                    pdu = new CollisionElasticPdu();
                    break;
                case PduType.EntityStateUpdate:
                    pdu = new EntityStateUpdatePdu();
                    break;
                default:
                    pdu = null;
                    break;
            }

            return pdu;
        }