RtdeDataPackage.java 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package at.acdp.urweb.rtde.packets;
  2. import java.io.DataInputStream;
  3. import java.io.DataOutputStream;
  4. import java.io.IOException;
  5. import java.util.HashMap;
  6. import java.util.concurrent.ConcurrentHashMap;
  7. import static at.acdp.urweb.rtde.CommandType.RTDE_TEXT_MESSAGE;
  8. public class RtdeDataPackage implements IRtdeData {
  9. private final RtdeSetupOutputs outputs;
  10. private HashMap<String, String> pdata=new HashMap<>();
  11. public RtdeDataPackage(RtdeSetupOutputs outputs) {
  12. this.outputs=outputs;
  13. }
  14. @Override
  15. public int getType() {
  16. return RTDE_TEXT_MESSAGE;
  17. }
  18. public HashMap<String, String> getPdata() {
  19. return pdata;
  20. }
  21. @Override
  22. public RtdeDataPackage read(DataInputStream di, int length) throws IOException {
  23. int recipeID=di.readByte();
  24. for(int i=0; i<outputs.variables.size(); i++) {
  25. String output=outputs.variables.get(i);
  26. String type=outputs.types.get(i);
  27. switch (type) {
  28. case "BOOL":
  29. pdata.put(output, String.valueOf(di.readBoolean()));
  30. break;
  31. case "UINT8":
  32. pdata.put(output, String.valueOf(di.readByte()));
  33. break;
  34. case "UINT32":
  35. case "INT32":
  36. pdata.put(output, String.valueOf(di.readInt()));
  37. break;
  38. case "UINT64":
  39. pdata.put(output, String.valueOf(di.readLong()));
  40. break;
  41. case "DOUBLE":
  42. pdata.put(output, String.valueOf(di.readDouble()));
  43. break;
  44. case "VECTOR3D":
  45. pdata.put(output, String.format("%f %f %f",di.readDouble(), di.readDouble(), di.readDouble()));
  46. break;
  47. case "VECTOR6D":
  48. pdata.put(output, String.format("%f %f %f %f %f %f",di.readDouble(), di.readDouble(), di.readDouble(), di.readDouble(), di.readDouble(), di.readDouble()));
  49. break;
  50. case "VECTOR6INT32":
  51. pdata.put(output, String.format("%d %d %d",di.readInt(), di.readInt(), di.readInt()));
  52. break;
  53. case "VECTOR6UINT32":
  54. pdata.put(output, String.format("%d %d %d %d %d %d",di.readInt(), di.readInt(), di.readInt(), di.readInt(), di.readInt(), di.readInt()));
  55. break;
  56. default:
  57. throw new IllegalStateException("Unexpected value: " + type);
  58. }
  59. }
  60. return this;
  61. }
  62. @Override
  63. public RtdeDataPackage send(DataOutputStream dos) throws IOException {
  64. sendHeader(dos,0);
  65. return this;
  66. }
  67. }