//PES 09182009  Added to work with Mobile
        /// <summary>
        /// Used to unmarshal data back into the correct PDU type.
        /// </summary>
        /// <param name="pdu_type">PDU type</param>
        /// <param name="ds">Datastream which contains the raw packet and Endian Type</param>
        /// <returns></returns>
        public static DIS1998net.Pdu UnMarshalRawPDU(DISnet.Utilities.PDUTypes.PDUType1998 pdu_type, DataInputStream ds)
        {
            DIS1998net.Pdu pdu = new DIS1998net.Pdu();

            switch (pdu_type)
            {
                case PDUTypes.PDUType1998.PDU_ENTITY_STATE:
                    DIS1998net.EntityStatePdu EntityStatePdu = new DIS1998net.EntityStatePdu();
                    EntityStatePdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)EntityStatePdu;
                    break;
                case PDUTypes.PDUType1998.PDU_FIRE:
                    DIS1998net.FirePdu FirePdu = new DIS1998net.FirePdu();
                    FirePdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)FirePdu;
                    break;
                case PDUTypes.PDUType1998.PDU_DETONATION:
                    DIS1998net.DetonationPdu DetonationPdu = new DIS1998net.DetonationPdu();
                    DetonationPdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)DetonationPdu;
                    break;
                case PDUTypes.PDUType1998.PDU_COLLISION:
                    DIS1998net.CollisionPdu CollisionPdu = new DIS1998net.CollisionPdu();
                    CollisionPdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)CollisionPdu;
                    break;
                case PDUTypes.PDUType1998.PDU_SERVICE_REQUEST:
                    DIS1998net.ServiceRequestPdu ServiceRequestPdu = new DIS1998net.ServiceRequestPdu();
                    ServiceRequestPdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)ServiceRequestPdu;
                    break;
                case PDUTypes.PDUType1998.PDU_RESUPPLY_OFFER:
                    DIS1998net.ResupplyOfferPdu ResupplyOfferPdu = new DIS1998net.ResupplyOfferPdu();
                    ResupplyOfferPdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)ResupplyOfferPdu;
                    break;
                case PDUTypes.PDUType1998.PDU_RESUPPLY_RECEIVED:
                    DIS1998net.ResupplyReceivedPdu ResupplyReceivedPdu = new DIS1998net.ResupplyReceivedPdu();
                    ResupplyReceivedPdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)ResupplyReceivedPdu;
                    break;
                case PDUTypes.PDUType1998.PDU_RESUPPLY_CANCEL:
                    DIS1998net.ResupplyCancelPdu ResupplyCancelPdu = new DIS1998net.ResupplyCancelPdu();
                    ResupplyCancelPdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)ResupplyCancelPdu;
                    break;
                case PDUTypes.PDUType1998.PDU_REPAIR_COMPLETE:
                    DIS1998net.RepairCompletePdu RepairCompletePdu = new DIS1998net.RepairCompletePdu();
                    RepairCompletePdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)RepairCompletePdu;
                    break;
                case PDUTypes.PDUType1998.PDU_REPAIR_RESPONSE:
                    DIS1998net.RepairResponsePdu RepairResponsePdu = new DIS1998net.RepairResponsePdu();
                    RepairResponsePdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)RepairResponsePdu;
                    break;
                case PDUTypes.PDUType1998.PDU_CREATE_ENTITY:
                    DIS1998net.CreateEntityPdu CreateEntityPdu = new DIS1998net.CreateEntityPdu();
                    CreateEntityPdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)CreateEntityPdu;
                    break;
                case PDUTypes.PDUType1998.PDU_REMOVE_ENTITY:
                    DIS1998net.RemoveEntityPdu RemoveEntityPdu = new DIS1998net.RemoveEntityPdu();
                    RemoveEntityPdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)RemoveEntityPdu;
                    break;
                case PDUTypes.PDUType1998.PDU_START_RESUME:
                    DIS1998net.StartResumePdu StartResumePdu = new DIS1998net.StartResumePdu();
                    StartResumePdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)StartResumePdu;
                    break;
                case PDUTypes.PDUType1998.PDU_ACKNOWLEDGE:
                    DIS1998net.AcknowledgePdu AcknowledgePdu = new DIS1998net.AcknowledgePdu();
                    AcknowledgePdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)AcknowledgePdu;
                    break;
                case PDUTypes.PDUType1998.PDU_ACTION_REQUEST:
                    DIS1998net.ActionRequestPdu ActionRequestPdu = new DIS1998net.ActionRequestPdu();
                    ActionRequestPdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)ActionRequestPdu;
                    break;
                case PDUTypes.PDUType1998.PDU_ACTION_RESPONSE:
                    DIS1998net.ActionResponsePdu ActionResponsePdu = new DIS1998net.ActionResponsePdu();
                    ActionResponsePdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)ActionResponsePdu;
                    break;
                case PDUTypes.PDUType1998.PDU_DATA_QUERY:
                    DIS1998net.DataQueryPdu DataQueryPdu = new DIS1998net.DataQueryPdu();
                    DataQueryPdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)DataQueryPdu;
                    break;
                case PDUTypes.PDUType1998.PDU_SET_DATA:
                    DIS1998net.SetDataPdu SetDataPdu = new DIS1998net.SetDataPdu();
                    SetDataPdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)SetDataPdu;
                    break;
                case PDUTypes.PDUType1998.PDU_EVENT_REPORT:
                    DIS1998net.EventReportPdu EventReportPdu = new DIS1998net.EventReportPdu();
                    EventReportPdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)EventReportPdu;
                    break;
                case PDUTypes.PDUType1998.PDU_COMMENT:
                    DIS1998net.CommentPdu CommentPdu = new DIS1998net.CommentPdu();
                    CommentPdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)CommentPdu;
                    break;
                case PDUTypes.PDUType1998.PDU_STOP_FREEZE:
                    DIS1998net.StopFreezePdu StopFreezePdu = new DIS1998net.StopFreezePdu();
                    StopFreezePdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)StopFreezePdu;
                    break;
                case PDUTypes.PDUType1998.PDU_SIGNAL:
                    DIS1998net.SignalPdu SignalPdu = new DIS1998net.SignalPdu();
                    SignalPdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)SignalPdu;
                    break;
                case PDUTypes.PDUType1998.PDU_TRANSMITTER:
                    DIS1998net.TransmitterPdu transmitterPdu = new DIS1998net.TransmitterPdu();
                    transmitterPdu.unmarshal(ds);
                    pdu = (DIS1998net.Pdu)transmitterPdu;
                    break;
            }

            return pdu;
        }
Exemplo n.º 2
0
        //PES 09182009  Added to work with Mobile
        /// <summary>
        /// Used to unmarshal data back into the correct PDU type.
        /// </summary>
        /// <param name="pdu_type">PDU type</param>
        /// <param name="ds">Datastream which contains the raw packet and Endian Type</param>
        /// <returns></returns>
        public static DIS1998net.Pdu UnMarshalRawPDU(DISnet.Utilities.PDUTypes.PDUType1998 pdu_type, DataInputStream ds)
        {
            DIS1998net.Pdu pdu = new DIS1998net.Pdu();

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

            case PDUTypes.PDUType1998.PDU_FIRE:
                DIS1998net.FirePdu FirePdu = new DIS1998net.FirePdu();
                FirePdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)FirePdu;
                break;

            case PDUTypes.PDUType1998.PDU_DETONATION:
                DIS1998net.DetonationPdu DetonationPdu = new DIS1998net.DetonationPdu();
                DetonationPdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)DetonationPdu;
                break;

            case PDUTypes.PDUType1998.PDU_COLLISION:
                DIS1998net.CollisionPdu CollisionPdu = new DIS1998net.CollisionPdu();
                CollisionPdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)CollisionPdu;
                break;

            case PDUTypes.PDUType1998.PDU_SERVICE_REQUEST:
                DIS1998net.ServiceRequestPdu ServiceRequestPdu = new DIS1998net.ServiceRequestPdu();
                ServiceRequestPdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)ServiceRequestPdu;
                break;

            case PDUTypes.PDUType1998.PDU_RESUPPLY_OFFER:
                DIS1998net.ResupplyOfferPdu ResupplyOfferPdu = new DIS1998net.ResupplyOfferPdu();
                ResupplyOfferPdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)ResupplyOfferPdu;
                break;

            case PDUTypes.PDUType1998.PDU_RESUPPLY_RECEIVED:
                DIS1998net.ResupplyReceivedPdu ResupplyReceivedPdu = new DIS1998net.ResupplyReceivedPdu();
                ResupplyReceivedPdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)ResupplyReceivedPdu;
                break;

            case PDUTypes.PDUType1998.PDU_RESUPPLY_CANCEL:
                DIS1998net.ResupplyCancelPdu ResupplyCancelPdu = new DIS1998net.ResupplyCancelPdu();
                ResupplyCancelPdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)ResupplyCancelPdu;
                break;

            case PDUTypes.PDUType1998.PDU_REPAIR_COMPLETE:
                DIS1998net.RepairCompletePdu RepairCompletePdu = new DIS1998net.RepairCompletePdu();
                RepairCompletePdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)RepairCompletePdu;
                break;

            case PDUTypes.PDUType1998.PDU_REPAIR_RESPONSE:
                DIS1998net.RepairResponsePdu RepairResponsePdu = new DIS1998net.RepairResponsePdu();
                RepairResponsePdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)RepairResponsePdu;
                break;

            case PDUTypes.PDUType1998.PDU_CREATE_ENTITY:
                DIS1998net.CreateEntityPdu CreateEntityPdu = new DIS1998net.CreateEntityPdu();
                CreateEntityPdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)CreateEntityPdu;
                break;

            case PDUTypes.PDUType1998.PDU_REMOVE_ENTITY:
                DIS1998net.RemoveEntityPdu RemoveEntityPdu = new DIS1998net.RemoveEntityPdu();
                RemoveEntityPdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)RemoveEntityPdu;
                break;

            case PDUTypes.PDUType1998.PDU_START_RESUME:
                DIS1998net.StartResumePdu StartResumePdu = new DIS1998net.StartResumePdu();
                StartResumePdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)StartResumePdu;
                break;

            case PDUTypes.PDUType1998.PDU_ACKNOWLEDGE:
                DIS1998net.AcknowledgePdu AcknowledgePdu = new DIS1998net.AcknowledgePdu();
                AcknowledgePdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)AcknowledgePdu;
                break;

            case PDUTypes.PDUType1998.PDU_ACTION_REQUEST:
                DIS1998net.ActionRequestPdu ActionRequestPdu = new DIS1998net.ActionRequestPdu();
                ActionRequestPdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)ActionRequestPdu;
                break;

            case PDUTypes.PDUType1998.PDU_ACTION_RESPONSE:
                DIS1998net.ActionResponsePdu ActionResponsePdu = new DIS1998net.ActionResponsePdu();
                ActionResponsePdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)ActionResponsePdu;
                break;

            case PDUTypes.PDUType1998.PDU_DATA_QUERY:
                DIS1998net.DataQueryPdu DataQueryPdu = new DIS1998net.DataQueryPdu();
                DataQueryPdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)DataQueryPdu;
                break;

            case PDUTypes.PDUType1998.PDU_SET_DATA:
                DIS1998net.SetDataPdu SetDataPdu = new DIS1998net.SetDataPdu();
                SetDataPdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)SetDataPdu;
                break;

            case PDUTypes.PDUType1998.PDU_EVENT_REPORT:
                DIS1998net.EventReportPdu EventReportPdu = new DIS1998net.EventReportPdu();
                EventReportPdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)EventReportPdu;
                break;

            case PDUTypes.PDUType1998.PDU_COMMENT:
                DIS1998net.CommentPdu CommentPdu = new DIS1998net.CommentPdu();
                CommentPdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)CommentPdu;
                break;

            case PDUTypes.PDUType1998.PDU_STOP_FREEZE:
                DIS1998net.StopFreezePdu StopFreezePdu = new DIS1998net.StopFreezePdu();
                StopFreezePdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)StopFreezePdu;
                break;

            case PDUTypes.PDUType1998.PDU_SIGNAL:
                DIS1998net.SignalPdu SignalPdu = new DIS1998net.SignalPdu();
                SignalPdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)SignalPdu;
                break;

            case PDUTypes.PDUType1998.PDU_TRANSMITTER:
                DIS1998net.TransmitterPdu transmitterPdu = new DIS1998net.TransmitterPdu();
                transmitterPdu.unmarshal(ds);
                pdu = (DIS1998net.Pdu)transmitterPdu;
                break;
            }

            return(pdu);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Threaded method that will continue to poll socket for data
        /// </summary>
        private void RetreiveDataFromSocket()
        {
            byte pdu_type;
            byte pdu_version;

            //Continue to process data received until false
            while (continueReceivingSocketData == true)
            {
                //Using queued collection to determine if data has arrived
                if (receiveBroadCast.pduQueue.Count > 0)
                {
                    //Process any PDUs (note that a collection was used as multiple pdu's can be sent in one packet)
                    List <byte[]> pdus = pduReceive.ProcessRawPDU(receiveBroadCast.pduQueue.Dequeue(), endianType);

                    int countPDU = 0;
                    int pduCount = pdus.Count;

                    while (countPDU < pduCount && continueReceivingSocketData == true)
                    {
                        byte[] objPdu = pdus[countPDU];
                        pdu_type = objPdu[PDU_TYPE_POSITION];                         //get pdu type

                        pdu_version = objPdu[PDU_VERSION_POSITION];                   //what version (currently not processing anything but DIS 1998)

                        //Cast as radio pdu, as receive socket method will throw out all other types of PDUs
                        DIS1998net.RadioCommunicationsFamilyPdu pduReceived = pduReceive.ConvertByteArrayToPDU1998(pdu_type, objPdu, endianType) as DIS1998net.RadioCommunicationsFamilyPdu;

                        SiteHostEntityRadioFrequency siteHostEntityRadioFrequency = new SiteHostEntityRadioFrequency(pduReceived.EntityId.Site, pduReceived.EntityId.Application, pduReceived.EntityId.Entity, pduReceived.RadioId, 0);

                        if (pduReceived.EntityId != entityID || (pduReceived.EntityId == entityID && this.isLoopBackAudioEnabled == true))
                        {
                            //Transmitter which contains the frequency of the signal pdu
                            if (pdu_type == 25)
                            {
                                //Update transmitter packets received
                                UpdatedTransmitterPacketsReceived();

                                DIS1998net.TransmitterPdu transmitterPDU_Received = (DIS1998net.TransmitterPdu)pduReceived;

                                //Assign the frequency from the Transmitter PDU just received.
                                siteHostEntityRadioFrequency.frequency = transmitterPDU_Received.Frequency;

                                //Remove the frequency from the collection as it will be added back later if it is transmitting
                                siteHostEntityRadioFrequencyCollection.Remove(siteHostEntityRadioFrequencyCollection.Find(i => i.application == siteHostEntityRadioFrequency.application && i.entity == siteHostEntityRadioFrequency.entity && i.radioID == siteHostEntityRadioFrequency.radioID && i.site == siteHostEntityRadioFrequency.site));

                                //If transmitter is transmitting then add to collection
                                if (transmitterPDU_Received.TransmitStateEnumeration == DIS1998net.TransmitterPdu.TransmitStateEnum.TransmitterOnTransmitting)
                                {
                                    siteHostEntityRadioFrequencyCollection.Add(siteHostEntityRadioFrequency);
                                }

                                foreach (FrequencySpeakerLocationTransmitterReceiverActiveClass item in FrequencySpeakerLocationTransmitterReceiverActive)
                                {
                                    if (siteHostEntityRadioFrequencyCollection.Exists(i => i.frequency == item.Frequency) == true)
                                    {
                                        ChangeRadioRecievingColorIndicator(item.UniqueID, true);
                                    }
                                    else
                                    {
                                        ChangeRadioRecievingColorIndicator(item.UniqueID, false);
                                    }
                                }
                            }


                            //is it a signal PDU?
                            if (pdu_type == 26)
                            {
                                //Update signal packets received
                                UpdatedSignalPacketsReceived();

                                DIS1998net.SignalPdu signalPDU = (DIS1998net.SignalPdu)pduReceived;

                                //Does the current signal pdu match one in the transmitter collection
                                if (siteHostEntityRadioFrequencyCollection.Exists(i => i.application == siteHostEntityRadioFrequency.application && i.entity == siteHostEntityRadioFrequency.entity && i.radioID == siteHostEntityRadioFrequency.radioID && i.site == siteHostEntityRadioFrequency.site) == true)
                                {
                                    //Retrieve the saved frequency
                                    SiteHostEntityRadioFrequency storedSitehostEntityRadioFrequency = siteHostEntityRadioFrequencyCollection.Find(i => i.application == siteHostEntityRadioFrequency.application && i.entity == siteHostEntityRadioFrequency.entity && i.radioID == siteHostEntityRadioFrequency.radioID && i.site == siteHostEntityRadioFrequency.site);

                                    //Transmitter was transmitting at this frequency, need to check to see if it is one that we will playback
                                    siteHostEntityRadioFrequency.frequency = storedSitehostEntityRadioFrequency.frequency;

                                    if (FrequencyOnPlayBackList(storedSitehostEntityRadioFrequency.frequency) == true)
                                    {
                                        //Need to retrieve the speaker location that matches the frequency
                                        FrequencySpeakerLocationTransmitterReceiverActiveClass retrievedFreqSpeakerTransmitterReceiver = FrequencySpeakerLocationTransmitterReceiverActive.Find(i => i.Frequency == storedSitehostEntityRadioFrequency.frequency);

                                        //Decode the data, only implemented uLaw
                                        byte[] unEncodedData = uLaw.Decode(((DIS1998net.SignalPdu)pduReceived).Data, 0, ((DIS1998net.SignalPdu)pduReceived).Data.Length);

                                        //Used to save to a stream
                                        //ms.Seek(ms.Length, SeekOrigin.Begin);
                                        //ms.Write(encodedData, 0, encodedData.Length);

                                        //Play back unencoded data
                                        playAudio.PlayBackAudio(unEncodedData, ALFormat.Mono16, (int)signalPDU.SampleRate, retrievedFreqSpeakerTransmitterReceiver.SpeakerLocation);
                                    }
                                }
                            }
                        }

                        countPDU++;

                        //Give GUI time to do things
                        Thread.Sleep(1);
                    }
                }
                //Give GUI time to do things
                Thread.Sleep(1);
            }
        }