Ejemplo n.º 1
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);
        }