private void Receive(IAsyncResult ar) { if (_udpClient == null) { return; } IPEndPoint ip = new IPEndPoint(IPAddress.Any, 0); var bytes = _udpClient.EndReceive(ar, ref ip); using (var reader = new BinaryReader(new MemoryStream(bytes))) { PDUHeader pdu = new PDUHeader(); PDUEncoder.Decode(pdu, reader); if (pdu.ExerciseId == ExerciseID) { var pduType = pdu.PDUType; PDUTypeContainer pduContainer; if (_pdusContainers.TryGetValue(pduType, out pduContainer)) { pduContainer.EnqueueIncomingPDU(reader); } } } _udpClient.BeginReceive(Receive, null); }
public void SendPDU(PDU pdu) { using (var stream = new MemoryStream()) { using (var writer = new BinaryWriter(stream)) { var header = new PDUHeader() { ProtocolVersion = 7, ExerciseId = ExerciseID, PDUType = pdu.PDUType, ProtocolFamilyType = 1, TimeStamp = _currentTimeStamp }; header.PDULength = (ushort)(PDUEncoder.Size(header) + PDUEncoder.Size(pdu)); PDUEncoder.Encode(header, writer); PDUEncoder.Encode(pdu, writer); var bytes = stream.ToArray(); _udpClient.Send(bytes, bytes.Length, _broadcastEndpoint); } } }
public void EnqueueIncomingPDU(BinaryReader reader) { var pdu = (PDU)Activator.CreateInstance(_type); PDUEncoder.Decode(pdu, reader); _incomingPDUsQueue.Enqueue(pdu); }
public static void Decode(IPDUEncodable target, BinaryReader reader) { PDUEncoder pduEncoder = new PDUEncoder(); pduEncoder._state = OperateState.Read; pduEncoder._reader = reader; target.Operate(pduEncoder); }
public static void Encode(IPDUEncodable target, BinaryWriter writer) { PDUEncoder pduEncoder = new PDUEncoder(); pduEncoder._state = OperateState.Write; pduEncoder._writer = writer; target.Operate(pduEncoder); }
public static int Size(IPDUEncodable target) { PDUEncoder pduEncoder = new PDUEncoder(); pduEncoder._state = OperateState.Size; pduEncoder._size = 0; target.Operate(pduEncoder); return(pduEncoder._size); }
public void Operate(PDUEncoder pduEncoder) { pduEncoder.Operate(ref ProtocolVersion); pduEncoder.Operate(ref ExerciseId); pduEncoder.OperateEnumByte(ref PDUType); pduEncoder.Operate(ref ProtocolFamilyType); pduEncoder.Operate(ref TimeStamp); pduEncoder.Operate(ref PDULength); pduEncoder.Padding(2); }
public void Operate(PDUEncoder pduEncoder) { pduEncoder.Operate(ref Kind); pduEncoder.Operate(ref Domain); pduEncoder.Operate(ref Country); pduEncoder.Operate(ref Category); pduEncoder.Operate(ref Subcategory); pduEncoder.Operate(ref Specific); pduEncoder.Operate(ref Extra); }
public override void Operate(PDUEncoder pduEncoder) { pduEncoder.Operate(ref OriginatingEntityID); pduEncoder.Operate(ref ReceivingEntityID); pduEncoder.Operate(ref EventType); pduEncoder.Padding(4); pduEncoder.OperateListSize32(ref FixedDatumRecords); pduEncoder.OperateListSize32(ref VariableDatumRecords); pduEncoder.Operate(ref FixedDatumRecords); pduEncoder.Operate(ref VariableDatumRecords); }
public override void Operate(PDUEncoder pduEncoder) { pduEncoder.Operate(ref FiringEntityId); pduEncoder.Operate(ref TargetEntityId); pduEncoder.Operate(ref MunitionId); pduEncoder.Operate(ref EventId); pduEncoder.Operate(ref FireMissionIndex); pduEncoder.Operate(ref Location); pduEncoder.Operate(ref BurstDescriptor); pduEncoder.Operate(ref Velocity); pduEncoder.Operate(ref Range); }
public override void Operate(PDUEncoder pduEncoder) { pduEncoder.Operate(ref FiringEntityId); pduEncoder.Operate(ref TargetEntityId); pduEncoder.Operate(ref MunitionId); pduEncoder.Operate(ref EventId); pduEncoder.Operate(ref Velocity); pduEncoder.Operate(ref Location); pduEncoder.Operate(ref BurstDescriptor); pduEncoder.Operate(ref LocationInEntityCoordinates); pduEncoder.OperateEnumByte(ref DetonationResult); pduEncoder.OperateArraySize(ref ArticulationParameters); pduEncoder.Padding(2); pduEncoder.Operate(ref ArticulationParameters); }
public override void Operate(PDUEncoder pduEncoder) { pduEncoder.Operate(ref EntityId); pduEncoder.Operate(ref ForceId); pduEncoder.OperateArraySize(ref ArticulatedParts); pduEncoder.Operate(ref EntityType); pduEncoder.Operate(ref AlternativeEntityType); pduEncoder.Operate(ref LinearVelocity); pduEncoder.Operate(ref Location); pduEncoder.Operate(ref Orientation); pduEncoder.Operate(ref Appearance); pduEncoder.Operate(ref DeadRecokning); pduEncoder.Operate(ref MarkingText); pduEncoder.Operate(ref Capabilities); pduEncoder.Operate(ref ArticulatedParts); }
public void Operate(PDUEncoder pduEncoder) { pduEncoder.Operate(ref Site); pduEncoder.Operate(ref Application); pduEncoder.Operate(ref Entity); }
public void Operate(PDUEncoder pduEncoder) { pduEncoder.Operate(ref BitValue); }
public void Operate(PDUEncoder pduEncoder) { pduEncoder.Operate(ref X); pduEncoder.Operate(ref Y); pduEncoder.Operate(ref Z); }
public abstract void Operate(PDUEncoder pduEncoder);