MessageTemplateLookup.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using Edge.Core.Parser.BinaryParser;
  2. using Edge.Core.Parser.BinaryParser.MessageEntity;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using VeederRoot_ATG_Console.MessageEntity.Incoming;
  8. namespace VeederRoot_ATG_Console
  9. {
  10. public class MessageTemplateLookup : IMessageTemplateLookup
  11. {
  12. public MessageTemplateBase GetMessageTemplateByRawBytes(byte[] bytes)
  13. {
  14. // skip SOH, and take 4 digits like i201 or I201.
  15. string functionCodeString = Encoding.ASCII.GetString(bytes.Skip(1).Take(4).ToArray());
  16. switch (functionCodeString)
  17. {
  18. case "9999":
  19. return new AtgConsoleCannotUnderstoodPreviousMsgResponse();
  20. case "i201":
  21. case "I201": return new QueryInTankInventoryReportResponse();
  22. case "i205":
  23. case "I205": return new QueryInTankStatusReportResponse();
  24. case "i20C":
  25. case "I20C": return new QueryInTankMostRecentDeliveryReportResponse();
  26. case "s505":
  27. case "S505":
  28. case "i517":
  29. case "I517":
  30. case "s517":
  31. case "S517":
  32. return new QueryOrSetSystemTypeAndLanguageFlagsResponse();
  33. case "i607":
  34. case "I607": return new QueryOrSetTankDiameterResponse();
  35. case "i602":
  36. case "I602": return new QueryOrSetTankProductLabelResponse();
  37. case "s501":
  38. case "S501":
  39. case "i501":
  40. case "I501": return new QueryOrSetTimeOfDayResponse();
  41. case "i101":
  42. case "I101": return new QuerySystemStatusReportResponse();
  43. case "iA01":
  44. case "IA01": return new QueryInTankDiagnosticReportResponse();
  45. }
  46. throw new InvalidOperationException("Unknown incoming message with functionCodeString: " + (functionCodeString ?? ""));
  47. }
  48. }
  49. }