using Edge.Core.Parser.BinaryParser; using Edge.Core.Parser.BinaryParser.MessageEntity; using PetroChinaOnlineWatchPlugin.MessageEntity; using PetroChinaOnlineWatchPlugin.MessageEntity.Incoming; namespace PetroChinaOnlineWatchPlugin { public class MessageTemplateLookup : IMessageTemplateLookup { public MessageTemplateBase GetMessageTemplateByRawBytes(byte[] bytes) { var type = (MessageType)(bytes[5] & 0xE0); if (bytes.Length == 10 && bytes[0] <= 254 && bytes[0] >= 0 && bytes[1] <= 254 && bytes[1] >= 0 && bytes[2] <= 254 && bytes[2] >= 0 && bytes[3] <= 254 && bytes[3] >= 0 && (((bytes[4] << 8) + bytes[5]) <= 65534)) return new HeartBeatIn(); else if (type == MessageType.IFSF_MESSAGE_TYPE_READ) return new ReadMessageIn(); else if (type == MessageType.IFSF_MESSAGE_TYPE_UNSOLICITED_WITHOUT_ACK || type == MessageType.IFSF_MESSAGE_TYPE_ANSWER || type == MessageType.IFSF_MESSAGE_TYPE_WRITE) return new AnswerWriteUnsolicitedMessageIn(); else if (type == MessageType.IFSF_MESSAGE_TYPE_ACK) return new AckMessageMessageIn(); else return null; } } }