123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- using Edge.Core.Parser.BinaryParser;
- using Edge.Core.Parser.BinaryParser.MessageEntity;
- using Edge.Core.Parser.BinaryParser.Util;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Threading.Tasks;
- namespace HengShan_Pump_NonIC
- {
- public class MessageTemplateLookup : IMessageTemplateLookup
- {
- /// <summary>
- /// Gets the default singleton instance of type MessageTemplateLookup.
- /// </summary>
- public static MessageTemplateLookup Default { get; } = new MessageTemplateLookup();
- /// <summary>
- /// resolve from the config
- /// </summary>
- private static readonly Dictionary<string, string> messageCodeToTypeStrDic
- = new Dictionary<string, string>();
- static MessageTemplateLookup()
- {
- messageCodeToTypeStrDic.Add("0xA0", "HengShan_Pump_NonIC.MessageEntity.GetNozzleStatusResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xA1", "HengShan_Pump_NonIC.MessageEntity.SetFuelPriceResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xA5", "HengShan_Pump_NonIC.MessageEntity.OpenResponse,HengShan_Pump_NonIC");
- //messageCodeToTypeStrDic.Add("0xA6", "HengShan_Pump_NonIC.MessageEntity.CloseResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xA7", "HengShan_Pump_NonIC.MessageEntity.AuthPumpWithGallonResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xA8", "HengShan_Pump_NonIC.MessageEntity.AuthPumpWithKiloResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xA9", "HengShan_Pump_NonIC.MessageEntity.AuthPumpWithAmountResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xAA", "HengShan_Pump_NonIC.MessageEntity.UnAuthorizePumpResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xAB", "HengShan_Pump_NonIC.MessageEntity.GetTransactionResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xAC", "HengShan_Pump_NonIC.MessageEntity.GetAccumulateResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xBA", "HengShan_Pump_NonIC.MessageEntity.GetVersionResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xBE", "HengShan_Pump_NonIC.MessageEntity.DisplayResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xC0", "HengShan_Pump_NonIC.MessageEntity.ClearResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xC3", "HengShan_Pump_NonIC.MessageEntity.GetBacklightStatusResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xE5", "HengShan_Pump_NonIC.MessageEntity.StartResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xA6", "HengShan_Pump_NonIC.MessageEntity.StopResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xE7", "HengShan_Pump_NonIC.MessageEntity.ReservePumpWithGallonResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xE8", "HengShan_Pump_NonIC.MessageEntity.ReservePumpWithKiloResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xE9", "HengShan_Pump_NonIC.MessageEntity.ReservePumpWithAmountResponse,HengShan_Pump_NonIC");
- messageCodeToTypeStrDic.Add("0xEA", "HengShan_Pump_NonIC.MessageEntity.RoundUpByAmountResponse,HengShan_Pump_NonIC");
- }
- /// <summary>
- /// Create a message entity based on input whole message raw bytes which is: 2bytes Len + 1 byte AppId + 1 byte SSK
- /// + variable length message code + variable length message body
- /// </summary>
- /// <param name="bytes">whole message raw bytes</param>
- /// <returns>new created message entity</returns>
- public MessageTemplateBase GetMessageTemplateByRawBytes(byte[] bytes)
- {
- // from protocol definition, the msg body started at 7th byte, and the 7th bytes is always the msg type code.
- var msgHandleCode = bytes.Skip(2).First();
- var key = "0x" + msgHandleCode.ToString("X").PadLeft(2, '0');
- if (messageCodeToTypeStrDic.ContainsKey(key))
- {
- var found = messageCodeToTypeStrDic[key];
- var t = Type.GetType(found);
- var targetInstance = (MessageTemplateBase)Activator.CreateInstance(t);
- return targetInstance;
- }
- else
- {
- throw new ArgumentException("Can't find correlated message entity type for incoming raw message bytes: " + bytes.Select(s => s.ToString("X").PadLeft(2, '0')).Aggregate((n, acc) => n + " " + acc));
- }
- }
- //<messageLookup>
- // <mappings>
- // <add name = "hengShan_Pump_NonIC" description="used for heng shan NonIC pump">
- // <add name = "0xA0" type="HengShan_Pump_NonIC.MessageEntity.GetNozzleStatusResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xA1" type="HengShan_Pump_NonIC.MessageEntity.SetFuelPriceResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xA5" type="HengShan_Pump_NonIC.MessageEntity.OpenResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xA6" type="HengShan_Pump_NonIC.MessageEntity.CloseResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xA7" type="HengShan_Pump_NonIC.MessageEntity.AuthPumpWithGallonResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xA8" type="HengShan_Pump_NonIC.MessageEntity.AuthPumpWithKiloResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xA9" type="HengShan_Pump_NonIC.MessageEntity.AuthPumpWithAmountResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xAA" type="HengShan_Pump_NonIC.MessageEntity.UnAuthorizePumpResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xAB" type="HengShan_Pump_NonIC.MessageEntity.GetTransactionResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xAC" type="HengShan_Pump_NonIC.MessageEntity.GetAccumulateResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xBA" type="HengShan_Pump_NonIC.MessageEntity.GetVersionResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xBE" type="HengShan_Pump_NonIC.MessageEntity.DisplayResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xC0" type="HengShan_Pump_NonIC.MessageEntity.ClearResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xC3" type="HengShan_Pump_NonIC.MessageEntity.GetBacklightStatusResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xE5" type="HengShan_Pump_NonIC.MessageEntity.StartResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xE7" type="HengShan_Pump_NonIC.MessageEntity.ReservePumpWithGallonResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xE8" type="HengShan_Pump_NonIC.MessageEntity.ReservePumpWithKiloResponse,HengShan_Pump_NonIC" description="">
- // </add>
- // <add name = "0xE9" type="HengShan_Pump_NonIC.MessageEntity.ReservePumpWithAmountResponse,HengShan_Pump_NonIC" description="" />
- // <add name = "0xEA" type="HengShan_Pump_NonIC.MessageEntity.RoundUpByAmountResponse,HengShan_Pump_NonIC" description="" />
- // </add>
- // <add name = "OPW_VaporRecoveryOnlineWatch" description="used for OPW vapor recovery online watch data collector">
- // <add name = "0x01" type="HengShan_NonIC.MessageEntity.GetNozzleStatusResponse" description="" />
- // </add>
- // <add name = "wayne_Pump" description="no use here, just for sample of config">
- // <add name = "4567" type="HengShan_NonIC.MessageEntity.GetNozzleStatusResponse" description="" />
- // </add>
- // <add name = "verifone_Termianl_P400" description="no use here, just for sample of config">
- // <add name = "1234" type="HengShan_NonIC.MessageEntity.GetNozzleStatusResponse" description="" />
- // </add>
- // <add name = "veederRoot_ATG_CZ334" description="no use here, just for sample of config">
- // <add name = "2345" type="HengShan_NonIC.MessageEntity.GetNozzleStatusResponse" description="" />
- // </add>
- // </mappings>
- //</messageLookup>
- }
- }
|