コード例 #1
0
        public String DecodeSBEMessageQATEngine(byte[] MessageBytes)
        {
            StringBuilder sb           = new StringBuilder();
            var           directBuffer = new DirectBuffer(MessageBytes);
            int           bufferOffset = 0;

            ushort blockLength = directBuffer.Uint16GetLittleEndian(bufferOffset);

            bufferOffset += 2;
            sb.AppendLine(CrackHelper.CreateLine("Header", "BlockLength", blockLength.ToString()));

            ushort templateId = directBuffer.Uint16GetLittleEndian(bufferOffset);

            bufferOffset += 2;
            sb.AppendLine(CrackHelper.CreateLine("Header", "TemplateId", templateId.ToString()));

            ushort schemaId = directBuffer.Uint16GetLittleEndian(bufferOffset);

            bufferOffset += 2;
            sb.AppendLine(CrackHelper.CreateLine("Header", "SchemaId", schemaId.ToString()));

            ushort version = directBuffer.Uint16GetLittleEndian(bufferOffset);

            bufferOffset += 2;
            sb.AppendLine(CrackHelper.CreateLine("Header", "Version", version.ToString()));

            SbeMessage Message = SbeLoader.LoadMessageById(templateId.ToString());

            if (Message == null)
            {
                throw new Exception("Message not recognized! TemplateId = " + templateId.ToString());
            }

            foreach (SbeField field in Message.Fields)
            {
                FillValue(directBuffer, field, ref bufferOffset);
            }

            sb.Append(Message.Crack());
            return(sb.ToString());
        }
コード例 #2
0
        public String DecodeSBEMessage(byte[] MessageBytes)
        {
            if (_Assembly == null)
            {
                throw new Exception("To use SBE Engine, please init SbeReflectionWrapper passing the sbe file dll as parameter");
            }

            StringBuilder sb            = new StringBuilder();
            var           directBuffer  = new DirectBuffer(MessageBytes);
            int           bufferOffset  = 0;
            const short   SchemaVersion = 0;

            Type MessageHeaderType = ReflectionHelper.GetType(_Assembly, _Header);
            var  MessageHeaderObj  = ReflectionHelper.GetObjectByType(_Assembly, _Header);

            //WRAP
            MessageHeaderType.InvokeMember("Wrap", BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public,
                                           null, MessageHeaderObj, new object[] { directBuffer, bufferOffset, SchemaVersion });

            PropertyInfo pi         = ReflectionHelper.GetPropertyByName(_Assembly, _Header, "TemplateId");
            string       templateId = pi.GetValue(MessageHeaderObj).ToString().Trim();

            Type MessageBodyType = ReflectionHelper.GetMessageTypeByTemplateId(_Assembly, templateId);

            if (MessageBodyType == null)
            {
                throw new Exception(String.Format("TemplateID = {0} not found in the binary!", templateId));
            }

            SbeMessage Message = SbeLoader.LoadMessageById(templateId);

            if (Message == null)
            {
                throw new Exception(String.Format("TemplateID = {0} not found in the protocol!", templateId));
            }

            PropertyInfo blockLength = ReflectionHelper.GetPropertyByName(_Assembly, _Header, "blockLength");
            PropertyInfo schemaId    = ReflectionHelper.GetPropertyByName(_Assembly, _Header, "schemaId");
            PropertyInfo version     = ReflectionHelper.GetPropertyByName(_Assembly, _Header, "version");

            sb.AppendLine(CrackHelper.CreateLine("Header", "BlockLength", blockLength.GetValue(MessageHeaderObj).ToString().Trim()));
            sb.AppendLine(CrackHelper.CreateLine("Header", "TemplateID", String.Format("{0} ({1})", templateId, Message.Name)));
            sb.AppendLine(CrackHelper.CreateLine("Header", "SchemaId", schemaId.GetValue(MessageHeaderObj).ToString().Trim()));
            sb.AppendLine(CrackHelper.CreateLine("Header", "Version", version.GetValue(MessageHeaderObj).ToString().Trim()));

            var       MessageBodyObj = ReflectionHelper.GetObjectByType(_Assembly, MessageBodyType.FullName);
            FieldInfo size           = ReflectionHelper.GetFieldByName(_Assembly, _Header, "Size");

            bufferOffset += int.Parse(size.GetValue(MessageHeaderObj).ToString());

            FieldInfo actingBlockLength = ReflectionHelper.GetFieldByName(_Assembly, MessageBodyType.Name, "BlockLength");
            FieldInfo actingVersion     = ReflectionHelper.GetFieldByName(_Assembly, MessageBodyType.Name, "Version");

            MessageBodyType.InvokeMember("WrapForDecode", BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public,
                                         null, MessageBodyObj, new object[] {
                directBuffer,
                bufferOffset,
                int.Parse(actingBlockLength.GetValue(MessageHeaderObj).ToString()),
                int.Parse(actingVersion.GetValue(MessageHeaderObj).ToString())
            });

            Message.FillFields(_Assembly, MessageBodyObj);
            sb.Append(Message.Crack());
            return(sb.ToString());
        }