private static void ReturnUnmarshalledPdu(object pdu, DataInputStream dStream) { // Unmarshal is the method name found in each of the PDU classes pdu.GetType().InvokeMember("Unmarshal", System.Reflection.BindingFlags.InvokeMethod, null, pdu, new object[] { dStream }, CultureInfo.InvariantCulture); }
/// <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); }
/// <summary> /// Used to unmarshal data back into the correct PDU type. /// </summary> /// <param name="pduType">PDU type</param> /// <param name="rawPDU">byte array containing the raw packets</param> /// <param name="endian">Endian type</param> /// <remarks>Added by PES to work with Mobile.</remarks> /// <returns>The PDU instance.</returns> public static Pdu UnmarshalRawPdu(PduType pduType, byte[] rawPdu, Endian endian) { DataInputStream ds = new DataInputStream(rawPdu, endian); return(UnmarshalRawPdu(pduType, ds)); }
/// <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(byte pduType, DataInputStream ds) { return(UnmarshalRawPdu((PduType)pduType, ds)); }