using Edge.Core.Parser.BinaryParser; using Edge.Core.Parser.BinaryParser.MessageEntity; using System; using System.Collections.Generic; using System.Linq; using System.Text; using VeederRoot_ATG_Console.MessageEntity.Incoming; namespace VeederRoot_ATG_Console { public class MessageTemplateLookup : IMessageTemplateLookup { public MessageTemplateBase GetMessageTemplateByRawBytes(byte[] bytes) { // skip SOH, and take 4 digits like i201 or I201. string functionCodeString = Encoding.ASCII.GetString(bytes.Skip(1).Take(4).ToArray()); switch (functionCodeString) { case "9999": return new AtgConsoleCannotUnderstoodPreviousMsgResponse(); case "i201": case "I201": return new QueryInTankInventoryReportResponse(); case "i205": case "I205": return new QueryInTankStatusReportResponse(); case "i20C": case "I20C": return new QueryInTankMostRecentDeliveryReportResponse(); case "s505": case "S505": case "i517": case "I517": case "s517": case "S517": return new QueryOrSetSystemTypeAndLanguageFlagsResponse(); case "i607": case "I607": return new QueryOrSetTankDiameterResponse(); case "i602": case "I602": return new QueryOrSetTankProductLabelResponse(); case "s501": case "S501": case "i501": case "I501": return new QueryOrSetTimeOfDayResponse(); case "i101": case "I101": return new QuerySystemStatusReportResponse(); case "iA01": case "IA01": return new QueryInTankDiagnosticReportResponse(); } throw new InvalidOperationException("Unknown incoming message with functionCodeString: " + (functionCodeString ?? "")); } } }