diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/PDUReciever.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/PDUReciever.java deleted file mode 100755 index 5ab4c55cfd26e8629ba58a195b819a1c0d3c3fbe..0000000000000000000000000000000000000000 --- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/PDUReciever.java +++ /dev/null @@ -1,128 +0,0 @@ -package MV3500Cohort2020JulySeptember.homework4.White; - -import MV3500Cohort2020JulySeptember.homework4.White.working.*; -import java.io.*; -import java.net.*; -import java.util.*; - -import edu.nps.moves.dis7.pdus.*; -import edu.nps.moves.dis7.utilities.*; - -/** - * Receives PDUs from GermanyEspduReceiverEspduVPNSender in IEEE DIS format. - * - * @date 09/05/2020 - * @author Bernd/Stefan - * @version 0.1 - */ -public class PDUReciever { - - /** - * Max size of a PDU in binary format that we can receive. This is actually - * somewhat outdated--PDUs can be larger--but this is a reasonable starting - * point. - */ - public static final int MAX_PDU_SIZE = 8192; - - /** - * Default port used, matches Wireshark DIS capture default - */ - public static final int DEFAULT_PORT = 2317; - public static final int SECOND_PORT = 3000; - public static final int THIRD_PORT = 2318; - - - /** - * Output prefix to identify this class - */ - private final static String TRACE_PREFIX = "[" + PDUReciever.class.getName() + "] "; - - public static void main(String args[]) { - System.out.println(TRACE_PREFIX + "started..."); - - MulticastSocket socket1; - MulticastSocket socket2; - MulticastSocket socket3; - DatagramPacket packet; - DatagramPacket packet2; - DatagramPacket packet3; - PduFactory pduFactory = new PduFactory(); - ArrayList<EntityID> knownEntities = new ArrayList<EntityID>(); - int pduCount = 0; - - try { - // Specify the socket to receive data - socket1 = new MulticastSocket(DEFAULT_PORT); - socket2 = new MulticastSocket(SECOND_PORT); - socket3 = new MulticastSocket(THIRD_PORT); - - System.out.println(TRACE_PREFIX + "listening for PDU packets on port " + DEFAULT_PORT );//+ " " + SECOND_PORT + " " + THIRD_PORT); - System.out.println("===================================================="); - - while (true) // Loop infinitely, receiving datagrams - { - byte buffer[] = new byte[MAX_PDU_SIZE]; - packet = new DatagramPacket(buffer, buffer.length); - - socket1.receive(packet); - - - - List<Pdu> pduBundle = pduFactory.getPdusFromBundle(packet.getData(), packet.getLength()); - if (pduBundle.size() > 1) { // should be 1 for this project - System.out.println("Bundle size is " + pduBundle.size()); - } - - // end iterator loop through PDU bundle - for (Pdu aPdu : pduBundle) { - pduCount++; - String receiptMessage = String.format("%3s", pduCount) // right justify, 3 characters - + ". received PDU type " + aPdu.getPduType().getValue() + "=" + aPdu.getPduType().name() + " " + aPdu.getClass().getName() + " from " + packet.getAddress(); - if (aPdu instanceof EntityStatePdu) { - System.out.println(receiptMessage); - EntityID entityID = ((EntityStatePdu) aPdu).getEntityID(); - Vector3Double position = ((EntityStatePdu) aPdu).getEntityLocation(); - System.out.println(" entityID triplet: [" + entityID.getSiteID() + ", " + entityID.getApplicationID() + ", " + entityID.getEntityID() + "] "); - if (!knownEntities.contains(entityID)){ - knownEntities.add(entityID); - EntityType entityType = ((EntityStatePdu) aPdu).getEntityType(); - System.out.println(" New Entity: " +entityType.getEntityKind() + " "+ entityType.getDomain() + " "+ entityType.getCountry() + " "+ entityType.getCategory() + " "+ entityType.getSubCategory() + " "+ entityType.getSpecific() ); - } - System.out.println(" Location in DIS coordinates: [" + position.getX() + ", " + position.getY() + ", " + position.getZ() + "]"); - - } - else if (aPdu instanceof FirePdu){ - System.out.println(receiptMessage); - EntityID firingEntityID = ((FirePdu) aPdu).getFiringEntityID(); - EntityID targetEntityID = ((FirePdu) aPdu).getTargetEntityID(); - MunitionDescriptor munitionDescriptor = ((FirePdu) aPdu).getDescriptor(); - System.out.println(" firingEntityID triplet: [" + firingEntityID.getSiteID() + ", " + firingEntityID.getApplicationID() + ", " + firingEntityID.getEntityID() + "] "); - System.out.println(" targetEntityID triplet: [" + targetEntityID.getSiteID() + ", " + targetEntityID.getApplicationID() + ", " + targetEntityID.getEntityID() + "] "); - System.out.println(" Munition Information: [" + munitionDescriptor.getMunitionType().getDomain() + "."+munitionDescriptor.getMunitionType().getCountry() + "." + munitionDescriptor.getMunitionType().getCategory() + "."+ munitionDescriptor.getMunitionType().getSubCategory() + "." + munitionDescriptor.getMunitionType().getSpecific() + "]"); - } - else if (aPdu instanceof CommentReliablePdu){ - System.out.println(receiptMessage); - ArrayList<VariableDatum> payloadList = (ArrayList)((CommentReliablePdu) aPdu).getVariableDatumRecords(); - if (!payloadList.isEmpty()) - System.out.print (" messages: "); - for (VariableDatum variableDatum : payloadList) - { - String nextComment = new String(variableDatum.getVariableDatumValue()); // convert byte[] to String - System.out.print (" \"" + nextComment + "\""); - System.out.println(); - } - } //OTHER PDU TYPES - else { - System.out.println(receiptMessage); - } - } // end of bundle loop - - } // end of while loop - } // end try block // end try block // end try block // end try block - catch (IOException ioe) { - System.out.println(TRACE_PREFIX + "Problem with input/output, see exception trace:"); - System.out.println(ioe); - } - System.out.println(TRACE_PREFIX + "complete."); - } // end main -} // end class diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/README.md b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/README.md deleted file mode 100644 index 0144d62d033fbe094ceac7a6d1bedc12d3c158b0..0000000000000000000000000000000000000000 --- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/README.md +++ /dev/null @@ -1,12 +0,0 @@ -## Homework 2: Multicast Networking - -Modify this file to describe your project work. - -Typical deliverables include properly packages source, execution log, and screen shots as appropriate. - -References include -* [README.md](../README.md) for this homework project. -* [README.md](../../../../README.md) for course assignments execution instructions. -* [assignments source subdirectories](../../../../../assignments/src) show examples from previous cohorts. - -Questions and innovation are always welcome, good luck! diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/Receiver Output Log.md b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/Receiver Output Log.md index a8efe650eb11ff581caeb9df98b2d1f61b0ba690..28edf57d003aa1f8405a0830f5680c0155e45e44 100644 --- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/Receiver Output Log.md +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/Receiver Output Log.md @@ -1,46 +1,149 @@ [MV3500Cohort2020JulySeptember.homework4.White.working.PDUReciever] started... [MV3500Cohort2020JulySeptember.homework4.White.working.PDUReciever] listening for PDU packets on port 2317 ==================================================== - 1. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 + 1. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 + entityID triplet: [1, 13, 26] + New Entity: EntityKind 1 PLATFORM Land Country 225 UNITED_STATES_OF_AMERICA_USA 7 39 3 + Location in DIS coordinates: [-2707501.7340396782, -4353408.810297934, 3781834.0645668795] + 2. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 + entityID triplet: [1, 13, 26] + Location in DIS coordinates: [-2707521.7340396782, -4353483.810297934, 3781834.0645668795] + 3. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 + entityID triplet: [1, 13, 25] + New Entity: EntityKind 1 PLATFORM Land Country 225 UNITED_STATES_OF_AMERICA_USA 2 41 3 + Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] + 4. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 + entityID triplet: [1, 13, 26] + Location in DIS coordinates: [-2707541.7340396782, -4353558.810297934, 3781834.0645668795] + 5. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 + entityID triplet: [1, 13, 25] + Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] + 6. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.11 + messages: "LAV25-A2 IS WITHIN DISTANCE OF RESUPPLY" + 7. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 + entityID triplet: [1, 13, 26] + Location in DIS coordinates: [-2707561.7340396782, -4353633.810297934, 3781834.0645668795] + 8. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 + entityID triplet: [1, 13, 25] + Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] + 9. received PDU type 6=RESUPPLY_OFFER edu.nps.moves.dis7.pdus.ResupplyOfferPdu from /10.1.105.11 + Resupply Offer from Entity [1, 13, 26] to resupply Entity [1, 13, 25] + Supplies Offered: [Quantity: 500.0, Type: EntityKind 2 MUNITION Air Country 225 UNITED_STATES_OF_AMERICA_USA 2 2 1 ] + 10. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 + entityID triplet: [1, 13, 26] + Location in DIS coordinates: [-2707581.7340396782, -4353708.810297934, 3781834.0645668795] + 11. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 + entityID triplet: [1, 13, 25] + Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] + 12. received PDU type 6=RESUPPLY_OFFER edu.nps.moves.dis7.pdus.ResupplyOfferPdu from /10.1.105.11 + Resupply Offer from Entity [1, 13, 26] to resupply Entity [1, 13, 25] + Supplies Offered: [Quantity: 500.0, Type: EntityKind 2 MUNITION Air Country 225 UNITED_STATES_OF_AMERICA_USA 2 2 1 ] + 13. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.11 + messages: "Britt Simulation Completed" + 14. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 + entityID triplet: [2, 10, 3] + New Entity: EntityKind 1 PLATFORM Land Country 225 UNITED_STATES_OF_AMERICA_USA 4 3 7 + Location in DIS coordinates: [-2709702.5301454174, -4349384.2159421, 3784766.9772485564] + 15. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 + entityID triplet: [1, 13, 2] + New Entity: EntityKind 1 PLATFORM Land Country 260 RUSSIA 2 41 3 + Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] + 16. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.8 + firingEntityID triplet: [2, 10, 3] + targetEntityID triplet: [1, 13, 2] + Munition Information: [Air.Country 225 UNITED_STATES_OF_AMERICA_USA.2.14.1] + 17. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 + entityID triplet: [2, 10, 3] + Location in DIS coordinates: [-2709702.5301454174, -4349384.2159421, 3784766.9772485564] + 18. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 + entityID triplet: [1, 13, 2] + Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] + 19. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.8 + firingEntityID triplet: [2, 10, 3] + targetEntityID triplet: [1, 13, 2] + Munition Information: [Air.Country 225 UNITED_STATES_OF_AMERICA_USA.2.14.1] + 20. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 + entityID triplet: [2, 10, 3] + Location in DIS coordinates: [-2709702.5301454174, -4349384.2159421, 3784766.9772485564] + 21. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 + entityID triplet: [1, 13, 2] + Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] + 22. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.8 + firingEntityID triplet: [2, 10, 3] + targetEntityID triplet: [1, 13, 2] + Munition Information: [Air.Country 225 UNITED_STATES_OF_AMERICA_USA.2.14.1] + 23. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 + entityID triplet: [2, 10, 3] + Location in DIS coordinates: [-2709702.5301454174, -4349384.2159421, 3784766.9772485564] + 24. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 + entityID triplet: [1, 13, 2] + Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] + 25. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.8 + firingEntityID triplet: [2, 10, 3] + targetEntityID triplet: [1, 13, 2] + Munition Information: [Air.Country 225 UNITED_STATES_OF_AMERICA_USA.2.14.1] + 26. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 + entityID triplet: [2, 10, 3] + Location in DIS coordinates: [-2709702.5301454174, -4349384.2159421, 3784766.9772485564] + 27. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 + entityID triplet: [1, 13, 2] + Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] + 28. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.8 + firingEntityID triplet: [2, 10, 3] + targetEntityID triplet: [1, 13, 2] + Munition Information: [Air.Country 225 UNITED_STATES_OF_AMERICA_USA.2.14.1] + 29. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 + entityID triplet: [2, 10, 3] + Location in DIS coordinates: [-2709702.5301454174, -4349384.2159421, 3784766.9772485564] + 30. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 + entityID triplet: [1, 13, 2] + Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] + 31. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.8 + firingEntityID triplet: [2, 10, 3] + targetEntityID triplet: [1, 13, 2] + Munition Information: [Air.Country 225 UNITED_STATES_OF_AMERICA_USA.2.14.1] + 32. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.8 + messages: "BMP2 DESTROYED BY M109A6 AFTER SIX VOLLEYS OF HE/PD ON TARGET" + 33. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.8 + messages: "Cannon Simulation Completed" + 34. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 entityID triplet: [1, 13, 25] -New Entity: EntityKind 1 PLATFORM Land Country 225 UNITED_STATES_OF_AMERICA_USA 2 41 3 Location in DIS coordinates: [-2707501.7340396782, -4353408.810297934, 3781834.0645668795] - 2. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 + 35. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 entityID triplet: [1, 13, 25] Location in DIS coordinates: [-2707521.7340396782, -4353483.810297934, 3781834.0645668795] - 3. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 + 36. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 entityID triplet: [1, 13, 2] -New Entity: EntityKind 1 PLATFORM Land Country 260 RUSSIA 2 41 3 Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 4. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 + 37. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 entityID triplet: [1, 13, 25] Location in DIS coordinates: [-2707541.7340396782, -4353558.810297934, 3781834.0645668795] - 5. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 + 38. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 entityID triplet: [1, 13, 2] Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 6. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.7 + 39. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.7 messages: "LAV25-A2 ACQUIRES TARGET BMP2 WITHIN FIRING DISTANCE" - 7. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 + 40. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 entityID triplet: [1, 13, 25] Location in DIS coordinates: [-2707561.7340396782, -4353633.810297934, 3781834.0645668795] - 8. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 + 41. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 entityID triplet: [1, 13, 2] Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 9. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.7 + 42. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.7 firingEntityID triplet: [1, 13, 25] targetEntityID triplet: [1, 13, 2] Munition Information: [Air.Country 225 UNITED_STATES_OF_AMERICA_USA.2.2.1] - 10. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 + 43. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 entityID triplet: [1, 13, 25] Location in DIS coordinates: [-2707581.7340396782, -4353708.810297934, 3781834.0645668795] - 11. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 + 44. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 entityID triplet: [1, 13, 2] Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 12. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.7 + 45. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.7 firingEntityID triplet: [1, 13, 25] targetEntityID triplet: [1, 13, 2] Munition Information: [Air.Country 225 UNITED_STATES_OF_AMERICA_USA.2.2.1] - 13. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.7 + 46. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.7 messages: "BMP2 DESTROYED BY LAV25-A2 AFTER TWO BURSTS OF 25mm HEI-T ON TARGET" - 14. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.7 + 47. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.7 messages: "White Simulation Completed" \ No newline at end of file diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/WhiteCannonBritt.pptx b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/WhiteCannonBritt.pptx new file mode 100644 index 0000000000000000000000000000000000000000..234660d271475dee6a8c08b30ee2a61db630be0a Binary files /dev/null and b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/WhiteCannonBritt.pptx differ diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/WhiteSimulation.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/WhiteSimulation.java deleted file mode 100644 index 9d95854ece52932f2ad8ae6bde531820449d9ff1..0000000000000000000000000000000000000000 --- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/WhiteSimulation.java +++ /dev/null @@ -1,462 +0,0 @@ -/** - * Copyright (c) 2008-2020, MOVES Institute, Naval Postgraduate School (NPS). All rights reserved. - * This work is provided under a BSD open-source license, see project license.html and license.txt - */ -package MV3500Cohort2020JulySeptember.homework4.White; - -import MV3500Cohort2020JulySeptember.homework4.White.working.*; -import MV3500Cohort2020JulySeptember.homework4.White.*; -import edu.nps.moves.dis7.enumerations.*; -import edu.nps.moves.dis7.pdus.*; -import edu.nps.moves.dis7.utilities.*; -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.InetAddress; -import java.net.MulticastSocket; -import java.net.UnknownHostException; -import java.util.ArrayList; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; - -public class WhiteSimulation -{ - // class variables - PduFactory pduFactory = new PduFactory(); - DisThreadedNetworkInterface disNetworkInterface; - DisThreadedNetworkInterface.PduListener pduListener; - Pdu receivedPdu; - - private String networkAddress = "10.1.105.7"; - private int networkPort = 2317; - - /** - * Constructor design goal: additional built-in initialization conveniences can go here - * to keep student efforts focused on the runSimulation() method. - */ - public WhiteSimulation() - { - // Under consideration. Constructor is not currently needed. - } - - /** - * Utility Constructor - * @param address network address to use - * @param port corresponding network port to use - */ - public WhiteSimulation(String address, int port) - { - setNetworkAddress(address); - - setNetworkPort(port); - } - - /** - * @return the networkAddress - */ - public String getNetworkAddress() - { - return networkAddress; - } - - /** - * @param networkAddress the networkAddress to set - */ - public final void setNetworkAddress(String networkAddress) - { - this.networkAddress = networkAddress; - } - - /** - * @return the networkPort - */ - public int getNetworkPort() - { - return networkPort; - } - - /** - * @param networkPort the networkPort to set - */ - public final void setNetworkPort(int networkPort) - { - this.networkPort = networkPort; - } - - /** - * Initialize network interface, choosing best available network interface - */ - public void setUpNetworkInterface() - { - disNetworkInterface = new DisThreadedNetworkInterface(getNetworkAddress(), getNetworkPort()); - - System.out.println("Network confirmation: address=" + disNetworkInterface.getMcastGroup() + " port=" + disNetworkInterface.getDisPort()); - pduListener = new DisThreadedNetworkInterface.PduListener() - { - /** Callback handler for listener */ - @Override - public void incomingPdu(Pdu newPdu) - { - receivedPdu = newPdu; - } - }; - disNetworkInterface.addListener(pduListener); - } - - /** All done, release network resources */ - public void tearDownNetworkInterface() - { - disNetworkInterface.removeListener(pduListener); - disNetworkInterface.kill(); - disNetworkInterface = null; - } - - /** - * Send a single Protocol Data Unit (PDU) of any type - * @param pdu the pdu to send - */ - private void sendSinglePdu(Pdu pdu) - { - try - { - disNetworkInterface.send(pdu); - Thread.sleep(100); // TODO consider refactoring the wait logic and moving externally - } - catch (InterruptedException ex) - { - System.err.println(this.getClass().getName() + " Error sending PDU: " + ex.getLocalizedMessage()); - System.exit(1); - } - } - - /** - * Send EntityState, Fire, Comment PDUs - * @see <a href="https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html">Passing Information to a Method or a Constructor</a> Arbitrary Number of Arguments - * @param entityStatePdu the ESPDU to send, if any - * @param firePdu the FirePDU to send, if any - * @param commentType enumeration value describing the narrative comment - * @param comments String array of narrative comments - */ - public void sendAllPdus(EntityStatePdu entityStatePdu, - FirePdu firePdu, - VariableRecordType commentType, - // vararg... variable length string - String... comments) - { - if (entityStatePdu != null) - sendPDU(entityStatePdu); - - if (firePdu != null) - sendPDU(firePdu); // bang - - if ((comments != null) && (comments.length > 0)) - { - ArrayList<String> newCommentsList = new ArrayList<>(); - for (int i = 0; i < comments.length; i++) - { - if (!comments[i].isEmpty()) - newCommentsList.add(comments[i]); // OK found something to send - } - if (!newCommentsList.isEmpty()) - { - if (commentType == null) - commentType = VariableRecordType.OTHER; - CommentPdu commentPdu = pduFactory.makeCommentPdu(commentType, newCommentsList.toArray(new String[0])); // comments); - sendPDU(commentPdu); - } - } - } - - /** - * Main method is first executed when a program instance is loaded. - * @see <a href="https://docs.oracle.com/javase/tutorial/getStarted/application/index.html">Java Tutorials: A Closer Look at the "Hello World!" Application</a> - * @param args command-line arguments are an array of optional String parameters that are passed from execution environment during invocation - */ - public static void main(String[] args) - { - WhiteSimulation thisProgram = new WhiteSimulation(); // creates instance - - // initial execution: can handle args array of initialization arguments here - if (args.length == 2) - { - if ((args[0] != null) && !args[0].isEmpty()) - thisProgram.setNetworkAddress(args[0]); - - if ((args[1] != null) && !args[1].isEmpty()) - thisProgram.setNetworkPort(Integer.parseInt(args[1])); - } - else if (args.length != 0) - { - System.err.println("Usage: " + thisProgram.getClass().getName() + " [address port]"); - System.exit(-1); - } - // OK here we go... - - //thisProgram.setUpNetworkInterface(); - - thisProgram.runSimulation (); // customization code goes in there - - //thisProgram.tearDownNetworkInterface(); - } - - /** - * Programmer-modifiable method for defining and running a new simulation of interest. - * Support include DIS EntityStatePdu, FirePdu and CommentPdu all available for - * modification and sending in a simulation loop. - */ - @SuppressWarnings("SleepWhileInLoop") - public void runSimulation () - { - try - { - final double LOOP_DURATION_SECONDS = 1.0; // seconds - final int MAX_LOOP_COUNT = 10; - int loopCount = 0; - VariableRecordType narrativeType = VariableRecordType.OTHER; // of potential use - boolean simulationComplete = false; // sentinel variable as termination condition - boolean fireBool = false; - boolean destBool = false; - // TODO reset clock to zero each time for consistent outputs. - - // your model setup: who's who in this zoo? - // create PDU objects and set their values - - Vector3Double eloc3 = new Vector3Double(); - double[] loc3 = CoordinateConversions.getXYZfromLatLonDegrees(36.600757, -121.869309, 0 );//NPS Corner by lake - - EntityID entityID_1 = new EntityID(); - entityID_1.setSiteID(1).setApplicationID(2).setEntityID(3); // made-up example ID - - EntityStatePdu entityStatePdu = pduFactory.makeEntityStatePdu(); - entityStatePdu.setEntityID(entityID_1); - - - - EntityID lavID = new EntityID(); - lavID.setSiteID(1); - lavID.setApplicationID(13); - lavID.setEntityID(25); - entityStatePdu.setEntityID(lavID); - EntityType lavType = new EntityType(); //1.1.225.2.41.3 Platform,Ground,USA,ArmoredFightingVehicle,LAV,LAV25A2 - lavType.setEntityKind(EntityKind.PLATFORM); - lavType.setDomain(Domain.inst(PlatformDomain.LAND)); - lavType.setCountry(Country.UNITED_STATES_OF_AMERICA_USA); - lavType.setCategory(2); - lavType.setSubCategory(41); - lavType.setSpecific(3); - entityStatePdu.setEntityType(lavType); - - Vector3Double eloc2 = new Vector3Double(); - double[] loc2 = CoordinateConversions.getXYZfromLatLonDegrees(36.599831, -121.878842, 0); //sloat delmonte intersection - eloc2.setX(loc2[0]); - eloc2.setY(loc2[1]); - eloc2.setZ(loc2[2]); - entityStatePdu.setEntityLocation(eloc2); - EulerAngles orient2 = new EulerAngles(); - orient2.setPhi((float) 0.0); - orient2.setPsi((float) 0.0); - orient2.setTheta((float) 0.0); - entityStatePdu.setEntityOrientation(orient2); - - EntityStatePdu entityStatePdu2 = pduFactory.makeEntityStatePdu(); - - - EntityID bmpID = new EntityID(); - bmpID.setSiteID(1); - bmpID.setApplicationID(13); - bmpID.setEntityID(2); - entityStatePdu2.setEntityID(bmpID); - EntityType bmpType = new EntityType(); //1.1.222.2.2.1 Platform,Ground,Russia,ArmoredFightingVehicle,BMP2,BMP2 - bmpType.setEntityKind(EntityKind.PLATFORM); - bmpType.setDomain(Domain.inst(PlatformDomain.LAND)); - bmpType.setCountry(Country.RUSSIA); - bmpType.setCategory(2); - bmpType.setSubCategory(41); - bmpType.setSpecific(3); - entityStatePdu2.setEntityType(bmpType); - Vector3Double eloc1 = new Vector3Double(); - double[] loc1 = CoordinateConversions.getXYZfromLatLonDegrees(36.594116, -121.877463, 0); //NPS Main Gate - eloc1.setX(loc1[0]); - eloc1.setY(loc1[1]); - eloc1.setZ(loc1[2]); - - entityStatePdu2.setEntityLocation(eloc1); - EulerAngles orient1 = new EulerAngles(); - orient1.setPhi((float) 3.1415); - orient1.setPsi((float) 0.0); - orient1.setTheta((float) 0.0); - entityStatePdu2.setEntityOrientation(orient1); - - int BMPHitsReceived = 0; - - System.out.println(eloc2.toString()); - System.out.println(eloc1.toString()); - - //FirePdu firePduNull = new FirePdu(); - FirePdu firePdu = pduFactory.makeFirePdu(); - EntityID fireID = new EntityID(); - fireID.setSiteID(1); - fireID.setApplicationID(13); - fireID.setEntityID(25); - EntityID targetID = new EntityID(); - targetID.setSiteID(1); - targetID.setApplicationID(13); - targetID.setEntityID(2); - - firePdu.setFiringEntityID(fireID); - firePdu.setTargetEntityID(targetID); - - EntityType HEType = new EntityType(); //2.9.225.2.2.1 - HEType.setEntityKind(EntityKind.MUNITION); - HEType.setDomain(Domain.inst(PlatformDomain.AIR)); - HEType.setCountry(Country.UNITED_STATES_OF_AMERICA_USA); - HEType.setCategory(2); - HEType.setSubCategory(2); - HEType.setSpecific(1); - MunitionDescriptor HEIT = new MunitionDescriptor(); - HEIT.setMunitionType(HEType); - HEIT.setQuantity(3); - HEIT.setFuse(MunitionDescriptorFuse.CONTACT_GRAZE); - HEIT.setRate(200); - - firePdu.setDescriptor(HEIT); - EntityID HEID = new EntityID(); - HEID.setEntityID(1); - firePdu.setMunitionExpendibleID(HEID); - - - CommentReliablePdu bmpDestroyedComment = pduFactory.makeCommentReliablePdu("BMP2 DESTROYED BY LAV25-A2 AFTER TWO BURSTS OF 25mm HEI-T ON TARGET"); - CommentReliablePdu bmpSightedComment = pduFactory.makeCommentReliablePdu("LAV25-A2 ACQUIRES TARGET BMP2 WITHIN FIRING DISTANCE"); - //if(eloc1.getX()) - - // should we customize this munition? what is it for your simulation? - - while (loopCount < MAX_LOOP_COUNT) // loop the simulation while allowed, can set additional conditions to break - { - String narrativeMessage1, narrativeMessage2, narrativeMessage3, narrativeMessage4; - narrativeMessage4 = ""; - // initialize loop variables - loopCount++; - - // ============================================================================================= - // your own simulation code starts here! - - // compute a track, update an ESPDU, whatever it is that your model is doing... - - // Where is my entity? - entityStatePdu.getEntityLocation().setX(entityStatePdu.getEntityLocation().getX() - 20); // 1m per timestep - entityStatePdu.getEntityLocation().setY(entityStatePdu.getEntityLocation().getY() - 75); - // decide whether to fire, and then update the firePdu. Hmmm, you might want a target to shoort at! - Double dx = eloc2.getX() - eloc1.getX(); - Double dy = eloc2.getY() - eloc1.getY(); - Double dz = eloc2.getZ() - eloc1.getZ(); - Double range = Math.sqrt(dx*dx + dy*dy); - System.out.println("range" + range + " dx:" +dx + " dy:"+ dy); - // etc. etc. your code goes here - - if(range < 100){ - if (!fireBool) - sendPDU(bmpSightedComment); - fireBool = true; - System.out.println("Entity#" + firePdu.getFiringEntityID().getEntityID() + " is firing " + firePdu.getDescriptor().getMunitionType().getDomain() + "."+firePdu.getDescriptor().getMunitionType().getCountry() + "." + firePdu.getDescriptor().getMunitionType().getCategory() + "."+ firePdu.getDescriptor().getMunitionType().getSubCategory() + "." + firePdu.getDescriptor().getMunitionType().getSpecific() + "."+ " at Entity#"+ firePdu.getTargetEntityID().getEntityID()); - - - if(firePdu.getTargetEntityID().getEntityID() == 2){ - BMPHitsReceived += 1; - if (BMPHitsReceived > 1) { - //DESTROY THE BMP! - - System.out.println("BMP Destroyed after "+ BMPHitsReceived + " hits from 25mm HEI-T"); - narrativeMessage4 = "Destroyed BMP2"; - destBool = true; - - } - } - } - - // make your reports: narrative code for CommentPdu here (set all to empty strings to avoid sending) - narrativeMessage1 = "MV3500 ExampleSimulationProgram"; - narrativeMessage2 = "runSimulation() loop " + loopCount; - narrativeMessage3 = "LAV-25A2"; // intentionally blank for testing - if (narrativeMessage4.isEmpty()){ - narrativeMessage4 = "BMP2"; - } - // your loop termination condition goes here - if (loopCount > 4) // for example - { - simulationComplete = true; - } - // your own simulation code is finished here! - // ============================================================================================= - - // keep track of timestep: wait duration for elapsed time in this loop - // Thread.sleep needs a (long) parameter for milliseconds, which are clumsy to use sometimes - Thread.sleep((long)(LOOP_DURATION_SECONDS * 1000)); // seconds * (1000 msec/sec) = milliseconds - System.out.println ("... Pausing for " + LOOP_DURATION_SECONDS + " seconds"); - - // send the status PDUs for this loop and continue - System.out.println ("sending PDUs for simulation step " + loopCount + ", monitor loopback to confirm sent"); - //sendAllPdus(entityStatePdu, firePduNull, null, narrativeMessage1, narrativeMessage2, narrativeMessage3); - //sendAllPdus(entityStatePdu2, null, null, narrativeMessage1, narrativeMessage2, narrativeMessage4); - sendPDU(entityStatePdu); - sendPDU(entityStatePdu2); - if (fireBool) - sendPDU(firePdu); - if (destBool) - sendPDU(bmpDestroyedComment); - - System.out.println ("... PDUs successfully sent"); - - // =============================== - // loop now finished, thus terminate if simulation complete, otherwise send latest PDUs and continue - if (simulationComplete || (loopCount > 10000)) // for example; including fail-safe condition is good - { - CommentReliablePdu completionPdu = pduFactory.makeCommentReliablePdu("White Simulation Completed"); - sendPDU(completionPdu); - System.out.println ("... Termination condition met, simulationComplete=" + simulationComplete); - break; - } - } // end of while loop - } - catch (Exception ex) // handle any exception that your code might choose to provoke! - { - Logger.getLogger(WhiteSimulation.class.getName()).log(Level.SEVERE, null, ex); - } - } - - public void sendPDU(Pdu pdu) { - System.out.println("Sending a PDU"); - MulticastSocket socket = null; // must be initialized, even if null - InetAddress destinationIp = null; // must be initialized, even if null - - try { - destinationIp = InetAddress.getByName(networkAddress); - } catch (UnknownHostException e) { - System.out.println(e + " Cannot create address"); - System.exit(0); - } - try { - // Set up a socket to send information - socket = new MulticastSocket(2317); - } catch (IOException ex) { - Logger.getLogger(WhiteSimulation.class.getName()).log(Level.SEVERE, null, ex); - } - - Set<InetAddress> broadcastAddresses; - // Loop through sending one ESPDUs - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - DataOutputStream dos = new DataOutputStream(baos); - try { - pdu.marshal(dos); - byte[] data = baos.toByteArray(); - - DatagramPacket packet = new DatagramPacket(data, data.length, destinationIp, 2317); - socket.send(packet); - socket.close(); - } catch (Exception ex) { - Logger.getLogger(WhiteSimulation.class.getName()).log(Level.SEVERE, null, ex); - } -} -} \ No newline at end of file diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/test/WhiteSimulation.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/test/WhiteSimulation.java index 56ac5e1371a9142ea905d470b683d91b2b6662a0..ca5d0405f2a4e8a01709d9d8d89225fe8e991c8c 100644 --- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/test/WhiteSimulation.java +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/test/WhiteSimulation.java @@ -31,7 +31,7 @@ public class WhiteSimulation Pdu receivedPdu; private String networkAddress = "10.1.105.7"; - private int networkPort = 2317; + private int networkPort = 3000; /** * Constructor design goal: additional built-in initialization conveniences can go here @@ -235,6 +235,10 @@ public class WhiteSimulation EntityStatePdu entityStatePdu = pduFactory.makeEntityStatePdu(); entityStatePdu.setEntityID(entityID_1); + // EntityMarking entityMarking = new EntityMarking (); + // entityMarking.setCharacters("WhiteSimulation".getBytes()); //entityMarking.setCharacters(Byte.valueOf("0")); // 11 characters max? + + // entityStatePdu.setMarking(entityMarking); EntityID lavID = new EntityID(); @@ -335,9 +339,9 @@ public class WhiteSimulation CommentReliablePdu bmpDestroyedComment = pduFactory.makeCommentReliablePdu("BMP2 DESTROYED BY LAV25-A2 AFTER TWO BURSTS OF 25mm HEI-T ON TARGET"); CommentReliablePdu bmpSightedComment = pduFactory.makeCommentReliablePdu("LAV25-A2 ACQUIRES TARGET BMP2 WITHIN FIRING DISTANCE"); //if(eloc1.getX()) + EntityID MTVRID = new EntityID(); - - ResupplyOfferPdu resupplyOfferPdu = pduFactory.makeResupplyOfferPdu(); + ResupplyOfferPdu resupplyOfferPdu = pduFactory.makeResupplyOfferPdu(); ArrayList<SupplyQuantity> pSupplies = new ArrayList<SupplyQuantity>(); SupplyQuantity ammoSupplyQ = new SupplyQuantity(); ammoSupplyQ.setSupplyType(HEType); @@ -348,9 +352,9 @@ public class WhiteSimulation //ammoSupply.setDomain(Entity) //ammoSupplyQ.setSupplyType(EntityType.) pSupplies.add(ammoSupplyQ); - resupplyOfferPdu.setSupplies(pSupplies); - resupplyOfferPdu.setReceivingEntityID(lavID); - resupplyOfferPdu.setSupplyingEntityID(bmpID); + resupplyOfferPdu.setSupplies(pSupplies); + resupplyOfferPdu.setReceivingEntityID(lavID); + resupplyOfferPdu.setSupplyingEntityID(MTVRID); // should we customize this munition? what is it for your simulation? @@ -456,7 +460,7 @@ public class WhiteSimulation } try { // Set up a socket to send information - socket = new MulticastSocket(2317); + socket = new MulticastSocket(3000); } catch (IOException ex) { Logger.getLogger(WhiteSimulation.class.getName()).log(Level.SEVERE, null, ex); } @@ -469,7 +473,7 @@ public class WhiteSimulation pdu.marshal(dos); byte[] data = baos.toByteArray(); - DatagramPacket packet = new DatagramPacket(data, data.length, destinationIp, 2317); + DatagramPacket packet = new DatagramPacket(data, data.length, destinationIp, 3000); socket.send(packet); socket.close(); } catch (Exception ex) { diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/PDUReciever.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/PDUReciever.java index d33465055cf548e178cb93b1540cdfe08e8fb261..2c57207923d4cfd8734ae0673de147f6b807ae91 100755 --- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/PDUReciever.java +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/PDUReciever.java @@ -26,7 +26,7 @@ public class PDUReciever { /** * Default port used, matches Wireshark DIS capture default */ - public static final int DEFAULT_PORT = 2317; + public static final int DEFAULT_PORT = 3000; public static final int SECOND_PORT = 3000; public static final int THIRD_PORT = 2318; diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/PduListenerSaver.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/PduListenerSaver.java new file mode 100644 index 0000000000000000000000000000000000000000..e5149fdb471eb39a06a4db3475df5acdffba9787 --- /dev/null +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/PduListenerSaver.java @@ -0,0 +1,96 @@ +/** + * Copyright (c) 2008-2020, MOVES Institute, Naval Postgraduate School (NPS). All rights reserved. + * This work is provided under a BSD open-source license, see project license.html and license.txt + */ +package MV3500Cohort2020JulySeptember.homework4.White.working; + +import edu.nps.moves.dis7.utilities.stream.PduRecorder; +import java.io.IOException; +import java.util.Scanner; + +/** Class to leverage the {@link edu.nps.moves.dis7.utilities.stream.PduRecorder} + * with PDU log saving console controls for resume, pause and quit. + * + * PduSaver.java created on Aug 21, 2019 + * Renamed PduListenerSaver + * MOVES Institute Naval Postgraduate School, Monterey, CA, USA www.nps.edu + * + * @author Mike Bailey, jmbailey@nps.edu + * @version $Id$ + */ +public class PduListenerSaver +{ + private final static String DEFAULT_OUTPUT_DIRECTORY = "pduLog"; + public static final String DEFAULT_MULTICAST_ADDRESS = "localhost"; + public static final int DEFAULT_MULTICAST_PORT = 2137; + + private enum mystate + { + RUNNING, + PAUSED; + } + + public static void main(String[] args) + { + String outputDirectory = DEFAULT_OUTPUT_DIRECTORY; + String multicastAddress = DEFAULT_MULTICAST_ADDRESS; + int multicastPort = DEFAULT_MULTICAST_PORT; + + System.out.println("OpenDis7Examples.PduListenerSaver started..."); + + switch (args.length) { + case 0: + break; + case 1: + outputDirectory = args[0]; + break; + case 3: + outputDirectory = args[0]; + multicastAddress = args[1]; + multicastPort = Integer.parseInt(args[2]); + break; + default: + // Common-sense practice is to print help message if invocation is problematic + System.err.println("Usage: PduListenerSaver() or PduListenerSaver(\"outputdir\") or PduListenerSaver(\"outputDirectory\",\"multicastAddress\", multicastPort"); + System.exit(1); + } + + System.out.println("Beginning PduListenerSaver (" + multicastAddress + ":" + multicastPort + ") to directory " + outputDirectory); + try { + PduRecorder recorder = new PduRecorder(outputDirectory, multicastAddress, multicastPort); // assumes save + mystate state = mystate.RUNNING; + Scanner scan = new Scanner(System.in); + + while (true) { + System.out.println("Type p/enter to pause, r/enter to resume, q/enter to quit"); + String line = scan.nextLine(); + if (line.equalsIgnoreCase("p") && state == mystate.RUNNING) { + recorder.stopPause(); + state = mystate.PAUSED; + System.out.println("... now PAUSED"); + } + else if (line.equalsIgnoreCase("p")) { + System.out.println("... still PAUSED"); + } + else if (line.equalsIgnoreCase("r") && state == mystate.PAUSED) { + recorder.startResume(); + state = mystate.RUNNING; + System.out.println("... now RUNNING"); + } + else if (line.equalsIgnoreCase("r")) { + System.out.println("... still RUNNING"); + } + else if (line.equalsIgnoreCase("q")) { + System.out.println("... QUIT"); + recorder.end(); + break; + } + } + System.out.println("Ending PduListenerSaver pdu recording, saved to file:"); + System.out.println(recorder.getLogFilePath()); + } + catch (IOException ex) { + System.err.println("Exception: " + ex.getClass().getSimpleName() + ": " + ex.getLocalizedMessage()); + } + } +} diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/Receiver Output Log.md b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/Receiver Output Log.md deleted file mode 100644 index e5cdc8b7a150c0754dd02229930316eb88062760..0000000000000000000000000000000000000000 --- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/Receiver Output Log.md +++ /dev/null @@ -1,152 +0,0 @@ -[MV3500Cohort2020JulySeptember.homework4.White.working.PDUReciever] started... -[MV3500Cohort2020JulySeptember.homework4.White.working.PDUReciever] listening for PDU packets on port 2317 -==================================================== - 1. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 - entityID triplet: [1, 13, 26] - New Entity: EntityKind 1 PLATFORM Land Country 225 UNITED_STATES_OF_AMERICA_USA 7 39 3 - Location in DIS coordinates: [-2707501.7340396782, -4353408.810297934, 3781834.0645668795] - 2. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 - entityID triplet: [1, 13, 26] - Location in DIS coordinates: [-2707521.7340396782, -4353483.810297934, 3781834.0645668795] - 3. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 - entityID triplet: [1, 13, 25] - New Entity: EntityKind 1 PLATFORM Land Country 225 UNITED_STATES_OF_AMERICA_USA 2 41 3 - Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 4. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 - entityID triplet: [1, 13, 26] - Location in DIS coordinates: [-2707541.7340396782, -4353558.810297934, 3781834.0645668795] - 5. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 - entityID triplet: [1, 13, 25] - Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 6. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.11 - messages: "LAV25-A2 IS WITHIN DISTANCE OF RESUPPLY" - 7. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 - entityID triplet: [1, 13, 26] - Location in DIS coordinates: [-2707561.7340396782, -4353633.810297934, 3781834.0645668795] - 8. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 - entityID triplet: [1, 13, 25] - Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 9. received PDU type 6=RESUPPLY_OFFER edu.nps.moves.dis7.pdus.ResupplyOfferPdu from /10.1.105.11 - Resupply Offer from Entity [1, 13, 26] to resupply Entity [1, 13, 25] - Supplies Offered: [Quantity: 500.0, Type: EntityKind 2 MUNITION Air Country 225 UNITED_STATES_OF_AMERICA_USA 2 2 1 ] - 10. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 - entityID triplet: [1, 13, 26] - Location in DIS coordinates: [-2707581.7340396782, -4353708.810297934, 3781834.0645668795] - 11. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.11 - entityID triplet: [1, 13, 25] - Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 12. received PDU type 6=RESUPPLY_OFFER edu.nps.moves.dis7.pdus.ResupplyOfferPdu from /10.1.105.11 - Resupply Offer from Entity [1, 13, 26] to resupply Entity [1, 13, 25] - Supplies Offered: [Quantity: 500.0, Type: EntityKind 2 MUNITION Air Country 225 UNITED_STATES_OF_AMERICA_USA 2 2 1 ] - 13. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.11 - messages: "Britt Simulation Completed" - 14. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 - entityID triplet: [2, 10, 3] - New Entity: EntityKind 1 PLATFORM Land Country 225 UNITED_STATES_OF_AMERICA_USA 4 3 7 - Location in DIS coordinates: [-2709702.5301454174, -4349384.2159421, 3784766.9772485564] - 15. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 - entityID triplet: [1, 13, 2] - New Entity: EntityKind 1 PLATFORM Land Country 260 RUSSIA 2 41 3 - Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 16. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.8 - firingEntityID triplet: [2, 10, 3] - targetEntityID triplet: [1, 13, 2] - Munition Information: [Air.Country 225 UNITED_STATES_OF_AMERICA_USA.2.14.1] - 17. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 - entityID triplet: [2, 10, 3] - Location in DIS coordinates: [-2709702.5301454174, -4349384.2159421, 3784766.9772485564] - 18. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 - entityID triplet: [1, 13, 2] - Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 19. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.8 - firingEntityID triplet: [2, 10, 3] - targetEntityID triplet: [1, 13, 2] - Munition Information: [Air.Country 225 UNITED_STATES_OF_AMERICA_USA.2.14.1] - 20. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 - entityID triplet: [2, 10, 3] - Location in DIS coordinates: [-2709702.5301454174, -4349384.2159421, 3784766.9772485564] - 21. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 - entityID triplet: [1, 13, 2] - Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 22. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.8 - firingEntityID triplet: [2, 10, 3] - targetEntityID triplet: [1, 13, 2] - Munition Information: [Air.Country 225 UNITED_STATES_OF_AMERICA_USA.2.14.1] - 23. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 - entityID triplet: [2, 10, 3] - Location in DIS coordinates: [-2709702.5301454174, -4349384.2159421, 3784766.9772485564] - 24. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 - entityID triplet: [1, 13, 2] - Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 25. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.8 - firingEntityID triplet: [2, 10, 3] - targetEntityID triplet: [1, 13, 2] - Munition Information: [Air.Country 225 UNITED_STATES_OF_AMERICA_USA.2.14.1] - 26. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 - entityID triplet: [2, 10, 3] - Location in DIS coordinates: [-2709702.5301454174, -4349384.2159421, 3784766.9772485564] - 27. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 - entityID triplet: [1, 13, 2] - Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 28. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.8 - firingEntityID triplet: [2, 10, 3] - targetEntityID triplet: [1, 13, 2] - Munition Information: [Air.Country 225 UNITED_STATES_OF_AMERICA_USA.2.14.1] - 29. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 - entityID triplet: [2, 10, 3] - Location in DIS coordinates: [-2709702.5301454174, -4349384.2159421, 3784766.9772485564] - 30. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.8 - entityID triplet: [1, 13, 2] - Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 31. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.8 - firingEntityID triplet: [2, 10, 3] - targetEntityID triplet: [1, 13, 2] - Munition Information: [Air.Country 225 UNITED_STATES_OF_AMERICA_USA.2.14.1] - 32. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.8 - messages: "BMP2 DESTROYED BY M109A6 AFTER SIX VOLLEYS OF HE/PD ON TARGET" - 33. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.8 - messages: "Cannon Simulation Completed" - 34. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 - entityID triplet: [1, 13, 25] - Location in DIS coordinates: [-2707501.7340396782, -4353408.810297934, 3781834.0645668795] - 35. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 - entityID triplet: [1, 13, 25] - Location in DIS coordinates: [-2707521.7340396782, -4353483.810297934, 3781834.0645668795] - 36. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 - entityID triplet: [1, 13, 2] - Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 37. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 - entityID triplet: [1, 13, 25] - Location in DIS coordinates: [-2707541.7340396782, -4353558.810297934, 3781834.0645668795] - 38. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 - entityID triplet: [1, 13, 2] - Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 39. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.7 - messages: "LAV25-A2 ACQUIRES TARGET BMP2 WITHIN FIRING DISTANCE" - 40. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 - entityID triplet: [1, 13, 25] - Location in DIS coordinates: [-2707561.7340396782, -4353633.810297934, 3781834.0645668795] - 41. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 - entityID triplet: [1, 13, 2] - Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 42. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.7 - firingEntityID triplet: [1, 13, 25] - targetEntityID triplet: [1, 13, 2] - Munition Information: [Air.Country 225 UNITED_STATES_OF_AMERICA_USA.2.2.1] - 43. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 - entityID triplet: [1, 13, 25] - Location in DIS coordinates: [-2707581.7340396782, -4353708.810297934, 3781834.0645668795] - 44. received PDU type 1=ENTITY_STATE edu.nps.moves.dis7.pdus.EntityStatePdu from /10.1.105.7 - entityID triplet: [1, 13, 2] - Location in DIS coordinates: [-2707576.630668249, -4353720.04383471, 3781324.902449432] - 45. received PDU type 2=FIRE edu.nps.moves.dis7.pdus.FirePdu from /10.1.105.7 - firingEntityID triplet: [1, 13, 25] - targetEntityID triplet: [1, 13, 2] - Munition Information: [Air.Country 225 UNITED_STATES_OF_AMERICA_USA.2.2.1] - 46. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.7 - messages: "BMP2 DESTROYED BY LAV25-A2 AFTER TWO BURSTS OF 25mm HEI-T ON TARGET" - 47. received PDU type 6=RESUPPLY_OFFER edu.nps.moves.dis7.pdus.ResupplyOfferPdu from /10.1.105.7 - Resupply Offer from Entity [1, 13, 2] to resupply Entity [1, 13, 25] - Supplies Offered: [Quantity: 500.0, Type: EntityKind 2 MUNITION Air Country 225 UNITED_STATES_OF_AMERICA_USA 2 2 1 ] - 48. received PDU type 62=COMMENT_RELIABLE edu.nps.moves.dis7.pdus.CommentReliablePdu from /10.1.105.7 - messages: "White Simulation Completed" \ No newline at end of file diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/WhiteSimulation.java b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/WhiteSimulation.java index b6c6768cdadb83aec9e3013d219e615d26b15590..ebee25ed486ab4686f7ab3bc88430a30e5fea01e 100644 --- a/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/WhiteSimulation.java +++ b/assignments/src/MV3500Cohort2020JulySeptember/homework4/White/working/WhiteSimulation.java @@ -233,13 +233,14 @@ public class WhiteSimulation EntityStatePdu entityStatePdu = pduFactory.makeEntityStatePdu(); entityStatePdu.setEntityID(entityID_1); - + EntityID lavID = new EntityID(); lavID.setSiteID(1); lavID.setApplicationID(13); lavID.setEntityID(25); + entityStatePdu.setEntityID(lavID); EntityType lavType = new EntityType(); //1.1.225.2.41.3 Platform,Ground,USA,ArmoredFightingVehicle,LAV,LAV25A2 lavType.setEntityKind(EntityKind.PLATFORM); @@ -256,6 +257,7 @@ public class WhiteSimulation eloc2.setY(loc2[1]); eloc2.setZ(loc2[2]); entityStatePdu.setEntityLocation(eloc2); + EulerAngles orient2 = new EulerAngles(); orient2.setPhi((float) 0.0); orient2.setPsi((float) 0.0); @@ -298,10 +300,11 @@ public class WhiteSimulation //FirePdu firePduNull = new FirePdu(); FirePdu firePdu = pduFactory.makeFirePdu(); - EntityID fireID = new EntityID(); + EntityID fireID = new EntityID(); fireID.setSiteID(1); fireID.setApplicationID(13); fireID.setEntityID(25); + EntityID targetID = new EntityID(); targetID.setSiteID(1); targetID.setApplicationID(13); @@ -310,13 +313,14 @@ public class WhiteSimulation firePdu.setFiringEntityID(fireID); firePdu.setTargetEntityID(targetID); - EntityType HEType = new EntityType(); //2.9.225.2.2.1 + EntityType HEType = new EntityType(); //2.9.225.2.2.1 MUNITION AIR USA BALLISTIC 25MM HEI-T HEType.setEntityKind(EntityKind.MUNITION); HEType.setDomain(Domain.inst(PlatformDomain.AIR)); HEType.setCountry(Country.UNITED_STATES_OF_AMERICA_USA); HEType.setCategory(2); HEType.setSubCategory(2); HEType.setSpecific(1); + MunitionDescriptor HEIT = new MunitionDescriptor(); HEIT.setMunitionType(HEType); HEIT.setQuantity(3); @@ -354,21 +358,19 @@ public class WhiteSimulation // Where is my entity? entityStatePdu.getEntityLocation().setX(entityStatePdu.getEntityLocation().getX() - 20); // 1m per timestep entityStatePdu.getEntityLocation().setY(entityStatePdu.getEntityLocation().getY() - 75); - // decide whether to fire, and then update the firePdu. Hmmm, you might want a target to shoort at! + Double dx = eloc2.getX() - eloc1.getX(); Double dy = eloc2.getY() - eloc1.getY(); Double dz = eloc2.getZ() - eloc1.getZ(); Double range = Math.sqrt(dx*dx + dy*dy); System.out.println("range" + range + " dx:" +dx + " dy:"+ dy); - // etc. etc. your code goes here - + if(range < 100){ if (!fireBool) sendPDU(bmpSightedComment); fireBool = true; System.out.println("Entity#" + firePdu.getFiringEntityID().getEntityID() + " is firing " + firePdu.getDescriptor().getMunitionType().getDomain() + "."+firePdu.getDescriptor().getMunitionType().getCountry() + "." + firePdu.getDescriptor().getMunitionType().getCategory() + "."+ firePdu.getDescriptor().getMunitionType().getSubCategory() + "." + firePdu.getDescriptor().getMunitionType().getSpecific() + "."+ " at Entity#"+ firePdu.getTargetEntityID().getEntityID()); - if(firePdu.getTargetEntityID().getEntityID() == 2){ BMPHitsReceived += 1; if (BMPHitsReceived > 1) { @@ -449,12 +451,20 @@ public class WhiteSimulation // Loop through sending one ESPDUs ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); + DatagramPacket packet = new DatagramPacket(baos.toByteArray(), baos.size(), destinationIp, 2317);//trying new things try { pdu.marshal(dos); - byte[] data = baos.toByteArray(); + //byte[] data = baos.toByteArray(); - DatagramPacket packet = new DatagramPacket(data, data.length, destinationIp, 2317); + //DatagramPacket packet = new DatagramPacket(data, data.length, destinationIp, 2317); + packet.setData(baos.toByteArray());// + + socket.send(packet); + + dos.flush(); // immediately force pdu write + baos.reset();// + socket.close(); } catch (Exception ex) { Logger.getLogger(WhiteSimulation.class.getName()).log(Level.SEVERE, null, ex);