Exemplo n.º 1
0
        private void cbMessages_SelectedIndexChanged(object sender, EventArgs e)
        {
            SbeMessage message = SbeLoader.LoadMessageByName(cbMessages.Text);

            if (message != null)
            {
                tree.BeginUpdate();
                lblDescription.Text = "Description: " + message.Description;
                lblId.Text          = "ID: " + message.Id;
                _Message.Clear();
                _Message.Add(message);
                if (checkBox1.Checked)
                {
                    CreateHeader();
                }
                tree.Roots = _Message;
                tree.ExpandAll();
                tree.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
                colValue.Width = 100;
                tree.EndUpdate();
            }
            else
            {
                lblDescription.Text = "Description:";
                lblId.Text          = "ID:";
                tree.Clear();
            }
        }
Exemplo n.º 2
0
        private void MainForm_Load(object sender, EventArgs e)
        {
            txtFileName.Text = @"C:\Users\Akio\source\repos\POC_SBE\packages\sbe-tool.1.17.0\tools\fixp-entrypoint-messages-1.2.xml";
            SbeLoader.Load(txtFileName.Text);

            if (SbeLoader._Messages.Count > 0)
            {
                cbMessages.Enabled = true;
                SbeLoader._Messages.ForEach(x => cbMessages.Items.Add(x));
            }
        }
Exemplo n.º 3
0
        private void btnLoadFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Title            = "Selecione o dicionário SBE";
            ofd.InitialDirectory = Application.ExecutablePath;
            ofd.Filter           = "Arquivo XML|*.xml";
            ofd.CheckFileExists  = true;
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                txtFileName.Text = ofd.FileName;
                SbeLoader.Load(txtFileName.Text);

                if (SbeLoader._Messages.Count > 0)
                {
                    cbMessages.Enabled = true;
                    SbeLoader._Messages.ForEach(x => cbMessages.Items.Add(x));
                }
            }
        }
        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());
        }
Exemplo n.º 5
0
        public static SbeField GetField(Assembly assembly, SbeField field, String MessageName, object MessageBody)
        {
            if (SbeLoader._Enums.Find(x => x.Name == field.Type) != null)
            {
                #region Enumeration
                GetEnumerationField(assembly, field, MessageBody, MessageName);
                #endregion
            }
            else if (SbeLoader._SimpleTypes.Find(x => x.Name == field.Type) != null)
            {
                #region Simple Type
                if (field.Presence.Contains("constant"))
                {
                    return(field);
                }

                //SimpleType
                SbeType simple = SbeLoader._SimpleTypes.Find(x => x.Name == field.Type);
                if (simple.PrimitiveType.ToLower().Equals("char"))
                {
                    FieldInfo l      = ReflectionHelper.GetFieldByName(assembly, MessageName, field.Name + "Length");
                    int       length = (int)l.GetValue(MessageBody);

                    var        fieldByte = new byte[length];
                    MethodInfo mi        = ReflectionHelper.GetMethodByName(assembly, MessageName, "Get" + field.Name, "byte[]");
                    mi.Invoke(MessageBody, new object[] { fieldByte, 0 }).ToString();

                    FieldInfo fi  = ReflectionHelper.GetFieldByName(assembly, MessageName, field.Name + "CharacterEncoding");
                    string    enc = fi.GetValue(MessageBody).ToString();
                    field.Value = Encoding.GetEncoding(enc).GetString(fieldByte, 0, length);
                }
                else
                {
                    PropertyInfo pi = ReflectionHelper.GetPropertyByName(assembly, MessageName, field.Name);
                    field.Value = Convert.ChangeType(pi.GetValue(MessageBody), pi.PropertyType).ToString();
                }
                #endregion
            }
            else if (SbeLoader._CompositeTypes.Find(x => x.Name == field.Type) != null)
            {
                #region Composite
                if (field.Type.ToLower().Equals("groupsizeencoding"))
                {
                    #region groupsizeencoding
                    //var fuelFiguresGroup = car.FuelFigures;
                    //while (fuelFiguresGroup.HasNext)
                    //{
                    //var fuelFigures = fuelFiguresGroup.Next();
                    //sb.Append("\ncar.fuelFigures.speed=").Append(fuelFigures.Speed);
                    //sb.Append("\ncar.fuelFigures.mpg=").Append(fuelFigures.Mpg);
                    //}
                    PropertyInfo no     = ReflectionHelper.GetPropertyByName(assembly, MessageName, field.Name);
                    var          repeat = no.GetValue(MessageBody);

                    PropertyInfo hasNext   = ReflectionHelper.GetPropertyByName(assembly, field.Name, "HasNext");
                    bool         nextValue = (bool)hasNext.GetValue(repeat);

                    SbeMessage _Original      = SbeLoader.LoadMessageByName(MessageName);
                    SbeField   _OriginalField = _Original.Fields.Find(x => x.Name == field.Name).Clone();
                    field.Fields.Clear();

                    MethodInfo next = ReflectionHelper.GetNestedMethodByName(assembly, MessageName, field.Name + "Group", "next");

                    int size = 0;
                    while (nextValue)
                    {
                        size++;
                        next.Invoke(repeat, null);
                        foreach (SbeField child in _OriginalField.Fields)
                        {
                            if (!child.Presence.Contains("constant"))
                            {
                                if (SbeLoader._Enums.Find(x => x.Name == child.Type) != null)
                                {
                                    Type _enumType = ReflectionHelper.GetType(assembly, child.Type);
                                    if (_enumType.IsEnum)
                                    {
                                        SbeEnum _enum = SbeLoader._Enums.Find(x => x.Name == child.Type);

                                        PropertyInfo pi = ReflectionHelper.GetPropertyByName(assembly, field.Name + "Group", child.Name);
                                        child.ValueRef = Convert.ChangeType(pi.GetValue(repeat), pi.PropertyType).ToString();

                                        SbeEnumValidValue valid = _enum.ValidValues.Find(x => x.Name == child.ValueRef);
                                        if (valid != null)
                                        {
                                            child.Value = valid.Value;
                                        }
                                    }
                                }
                                else
                                {
                                    PropertyInfo pi = ReflectionHelper.GetNestedPropertyByName(assembly, MessageName, field.Name + "Group", child.Name);
                                    child.Value = pi.GetValue(repeat).ToString();
                                }
                            }
                            field.Fields.Add(child.Clone());
                        }

                        nextValue = (bool)hasNext.GetValue(repeat);
                    }
                    field.Value = size.ToString();
                    #endregion
                }
                else
                {
                    PropertyInfo pi = ReflectionHelper.GetPropertyByName(assembly, MessageName, field.Type);
                    if (pi != null)
                    {
                        object parent = pi.GetValue(MessageBody);

                        foreach (SbeField child in field.Fields)
                        {
                            if (child.Presence.Contains("constant"))
                            {
                                continue;
                            }

                            PropertyInfo pi2 = ReflectionHelper.GetPropertyByName(assembly, field.Type, child.Name);
                            child.Value = pi2.GetValue(parent).ToString();
                        }
                    }
                    else
                    {
                        // length = car.GetManufacturer(buffer, 0, buffer.Length);
                        //sb.Append("\ncar.manufacturer=").Append(Encoding.GetEncoding(Car.ManufacturerCharacterEncoding).GetString(buffer, 0, length));
                        // length = car.GetModel(buffer, 0, buffer.Length);
                        //sb.Append("\ncar.model=").Append(Encoding.GetEncoding(Car.ModelCharacterEncoding).GetString(buffer, 0, length));

                        FieldInfo  fi     = ReflectionHelper.GetFieldByName(assembly, MessageName, field.Name + "CharacterEncoding");
                        var        buffer = new byte[128];
                        MethodInfo mi     = ReflectionHelper.GetMethodByName(assembly, MessageName, "Get" + field.Name, "byte[]");

                        int len = (int)(mi.Invoke(MessageBody, new object[] { buffer, 0, buffer.Length }));
                        field.Value = Encoding.GetEncoding(fi.GetValue(MessageBody).ToString()).GetString(buffer, 0, len);
                    }
                }
                #endregion
            }

            return(field);
        }
Exemplo n.º 6
0
        public static void SetField(Assembly assembly, SbeField field, String MessageName, object MessageBody)
        {
            if (SbeLoader._Enums.Find(x => x.Name == field.Type) != null)
            {
                #region Enumeration
                SetEnumerationField(assembly, field, MessageBody, MessageName);
                #endregion
            }
            else if (SbeLoader._SimpleTypes.Find(x => x.Name == field.Type) != null)
            {
                #region Simple Type
                if (field.Presence.Contains("constant") || String.IsNullOrEmpty(field.Value))
                {
                    return;
                }

                //SimpleType
                SbeType simple = SbeLoader._SimpleTypes.Find(x => x.Name == field.Type);
                if (simple.PrimitiveType.ToLower().Equals("char"))
                {
                    FieldInfo  fi        = ReflectionHelper.GetFieldByName(assembly, MessageName, field.Name + "CharacterEncoding");
                    byte[]     fieldByte = System.Text.Encoding.GetEncoding(fi.GetValue(MessageBody).ToString()).GetBytes(field.Value);
                    MethodInfo mi        = ReflectionHelper.GetMethodByName(assembly, MessageName, "Set" + field.Name, "byte[]");
                    mi.Invoke(MessageBody, new object[] { fieldByte, 0 });
                }
                else
                {
                    PropertyInfo pi = ReflectionHelper.GetPropertyByName(assembly, MessageName, field.Name);
                    pi.SetValue(MessageBody, Convert.ChangeType(field.Value, pi.PropertyType));
                }
                #endregion
            }
            else if (SbeLoader._CompositeTypes.Find(x => x.Name == field.Type) != null)
            {
                #region Composite
                if (field.Type.ToLower().Equals("groupsizeencoding"))
                {
                    #region groupsizeencoding
                    //var sides = cross.NoSidesCount(2);
                    //sides.Next();
                    //sides.Side = Side.BUY;
                    //sides.Account = 111;
                    //sides.ClOrdID = 12345;
                    //sides.Next();
                    //sides.Side = Side.SELL;
                    //sides.Account = 222;
                    //sides.ClOrdID = 67890;
                    MethodInfo mi          = ReflectionHelper.GetMethodByName(assembly, MessageName, field.Name + "Count");
                    var        repeatGroup = mi.Invoke(MessageBody, new object[] { int.Parse(field.Value) });

                    MethodInfo next = ReflectionHelper.GetNestedMethodByName(assembly, MessageName, field.Name + "Group", "next");

                    SbeMessage _Original      = SbeLoader.LoadMessageByName(MessageName);
                    SbeField   _OriginalField = _Original.Fields.Find(x => x.Name == field.Name).Clone();

                    foreach (SbeField child in field.Fields)
                    {
                        if (child.Name == _OriginalField.Fields[0].Name)
                        {
                            next.Invoke(repeatGroup, null);
                        }

                        if (!String.IsNullOrEmpty(child.Value))
                        {
                            if (SbeLoader._Enums.Find(x => x.Name == child.Type) != null)
                            {
                                if (child.Presence.Contains("constant") || String.IsNullOrEmpty(child.Value))
                                {
                                    continue;
                                }

                                Type _enumType = ReflectionHelper.GetType(assembly, child.Type);
                                if (_enumType.IsEnum)
                                {
                                    SbeEnum           _enum = SbeLoader._Enums.Find(x => x.Name == child.Type);
                                    SbeEnumValidValue valid = _enum.ValidValues.Find(x => x.Value == child.Value);

                                    PropertyInfo pi = ReflectionHelper.GetNestedPropertyByName(assembly, MessageName, field.Name + "Group", child.Name);
                                    pi.SetValue(repeatGroup, Enum.Parse(_enumType, valid.Name));
                                }
                            }
                            else
                            {
                                PropertyInfo pi = ReflectionHelper.GetNestedPropertyByName(assembly, MessageName, field.Name + "Group", child.Name);
                                pi.SetValue(repeatGroup, Convert.ChangeType(child.Value, pi.PropertyType));
                            }
                        }
                    }
                    #endregion
                }
                else
                {
                    PropertyInfo pi = ReflectionHelper.GetPropertyByName(assembly, MessageName, field.Type);
                    if (pi != null)
                    {
                        object parent = pi.GetValue(MessageBody);

                        foreach (SbeField child in field.Fields)
                        {
                            if (child.Presence.Contains("constant") || String.IsNullOrEmpty(child.Value))
                            {
                                continue;
                            }

                            PropertyInfo pi2 = ReflectionHelper.GetPropertyByName(assembly, field.Type, child.Name);
                            pi2.SetValue(parent, Convert.ChangeType(child.Value, pi2.PropertyType));
                        }
                    }
                    else
                    {
                        // Manufacturer = Encoding.GetEncoding(Car.ManufacturerCharacterEncoding).GetBytes("Honda");
                        // car.SetManufacturer(Manufacturer, srcOffset, Manufacturer.Length);
                        FieldInfo fi        = ReflectionHelper.GetFieldByName(assembly, MessageName, field.Name + "CharacterEncoding");
                        byte[]    fieldByte = System.Text.Encoding.GetEncoding(fi.GetValue(MessageBody).ToString())
                                              .GetBytes(field.Value);
                        MethodInfo mi = ReflectionHelper.GetMethodByName(assembly, MessageName, "Set" + field.Name, "byte[]");
                        mi.Invoke(MessageBody, new object[] { fieldByte, 0, fieldByte.Length });
                        //mi.Invoke(MessageBody, new object[] { fieldByte, 0 });
                    }
                }
                #endregion
            }
        }
Exemplo n.º 7
0
        private void tree_CellEditFinishing(object sender, BrightIdeasSoftware.CellEditEventArgs e)
        {
            if (e.Cancel)
            {
                return;
            }

            SbeField field = (SbeField)e.RowObject;

            if (e.Control is ComboBox)
            {
                if (e.Column.Text == "PrimitiveType")
                {
                    field.PrimitiveType = e.Control.Text.Trim();
                    switch (field.PrimitiveType)
                    {
                    case "uint8":
                    case "int8":
                        field.Length = 1;
                        break;

                    case "uint16":
                    case "int16":
                        field.Length = 2;
                        break;

                    case "uint32":
                    case "int32":
                        field.Length = 4;
                        break;

                    case "uint64":
                    case "int64":
                        field.Length = 8;
                        break;

                    case "char":
                        field.Length = 10;
                        break;
                    }
                }
                else if (e.Column.Text == "Value")
                {
                    if (e.Control.Text.Contains("|"))
                    {
                        field.Value = e.Control.Text.Split('|')[0].Trim();
                    }
                    else
                    {
                        field.Value = e.Control.Text.Trim();
                    }
                }
            }
            else if (e.Control is TextBox)
            {
                if (e.Column.Text == "Value")
                {
                    field.Value = e.Control.Text.Trim();
                }
                else if (e.Column.Text == "Length")
                {
                    field.Length = int.Parse(e.Control.Text.Trim());
                }
            }

            if (field.Type.ToLower().Equals("groupsizeencoding"))
            {
                try
                {
                    int        repeating           = int.Parse(field.Value);
                    int        repeatingGroupAtual = field.Fields.FindAll(x => x.Name == field.Fields[0].Name).Count;
                    SbeMessage _Original           = null;
                    if (checkBox1.Checked)
                    {
                        _Original = SbeLoader.LoadMessageByName(_Message[1].Name);
                    }
                    else
                    {
                        _Original = SbeLoader.LoadMessageByName(_Message[0].Name);
                    }

                    SbeField _OriginalField = _Original.Fields.Find(x => x.Name == field.Name).Clone();

                    if (repeating > repeatingGroupAtual)
                    {
                        while (repeating > repeatingGroupAtual)
                        {
                            SbeField _FieldOriginal = _OriginalField.Clone();
                            field.Fields.AddRange(_FieldOriginal.Fields);
                            repeatingGroupAtual = field.Fields.FindAll(x => x.Name == field.Fields[0].Name).Count;
                        }
                    }
                    else if (repeating < repeatingGroupAtual)
                    {
                        while (repeating < repeatingGroupAtual)
                        {
                            foreach (SbeField _ChildField in _OriginalField.Fields)
                            {
                                SbeField toRemove = field.Fields.FindLast(x => x.Name == _ChildField.Name);
                                field.Fields.Remove(toRemove);
                            }

                            repeatingGroupAtual = field.Fields.FindAll(x => x.Name == field.Fields[0].Name).Count;
                        }
                    }
                    tree.Roots = _Message;
                    tree.ExpandAll();
                }
                catch
                {
                }
            }

            tree.RefreshItem(e.ListViewItem);
            e.Cancel = true;
        }
        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());
        }
Exemplo n.º 9
0
        static void Main(string[] args)
        {
            TcpListener server = null;

            try
            {
                // Set the TcpListener on port 13000.
                Int32     port      = 13000;
                IPAddress localAddr = IPAddress.Parse("127.0.0.1");

                // TcpListener server = new TcpListener(port);
                server = new TcpListener(localAddr, port);

                // Start listening for client requests.
                server.Start();

                // Buffer for reading data
                Byte[] bytes = new Byte[256];

                // Enter the listening loop.
                while (true)
                {
                    Console.Write("Waiting for a connection... ");

                    // Perform a blocking call to accept requests.
                    // You could also user server.AcceptSocket() here.
                    TcpClient client = server.AcceptTcpClient();
                    Console.WriteLine("Connected!");


                    // Get a stream object for reading and writing
                    NetworkStream stream = client.GetStream();

                    int i;

                    // Loop to receive all the data sent by the client.
                    while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        var byteBuffer = new byte[4096];
                        // You need to "wrap" the array with a DirectBuffer, this class is used by the generated code to read and write efficiently to the underlying byte array
                        var         directBuffer  = new DirectBuffer(bytes);
                        int         bufferOffset  = 0;
                        const short SchemaVersion = 0;

                        string type = "qatsbeengine";
                        switch (type)
                        {
                            #region car
                        case "car":
                            var MessageHeader = new Sbe.MessageHeader();
                            var Car           = new Sbe.Car();

                            // position the MessageHeader object at the beginning of the array
                            MessageHeader.Wrap(directBuffer, bufferOffset, SchemaVersion);

                            Console.WriteLine("MessageHeader.BlockLength=" + MessageHeader.BlockLength);
                            Console.WriteLine("MessageHeader.TemplateId=" + MessageHeader.TemplateId);
                            Console.WriteLine("MessageHeader.SchemaId=" + MessageHeader.SchemaId);
                            Console.WriteLine("MessageHeader.Version=" + MessageHeader.Version);

                            // Extract info from the header
                            // In a real app you would use that to lookup the applicable flyweight to decode this type of message based on templateId and version.
                            int actingBlockLength = MessageHeader.BlockLength;
                            int actingVersion     = MessageHeader.Version;

                            bufferOffset += Sbe.MessageHeader.Size;
                            // now we decode the message
                            CarExample.Decode(Car, directBuffer, bufferOffset, actingBlockLength, actingVersion);
                            break;

                            #endregion
                        case "fix":
                            var MessageHeaderFix = new SbeFIX.MessageHeader();
                            var sno = new NegotiateResponse();

                            // position the MessageHeader object at the beginning of the array
                            MessageHeaderFix.Wrap(directBuffer, bufferOffset, SchemaVersion);

                            Console.WriteLine("MessageHeader.BlockLength=" + MessageHeaderFix.BlockLength);
                            Console.WriteLine("MessageHeader.TemplateId=" + MessageHeaderFix.TemplateId);
                            Console.WriteLine("MessageHeader.SchemaId=" + MessageHeaderFix.SchemaId);
                            Console.WriteLine("MessageHeader.Version=" + MessageHeaderFix.Version);

                            // Extract info from the header
                            // In a real app you would use that to lookup the applicable flyweight to decode this type of message based on templateId and version.
                            int actingBlockLengthFix = MessageHeaderFix.BlockLength;
                            int actingVersionFix     = MessageHeaderFix.Version;

                            bufferOffset += SbeFIX.MessageHeader.Size;

                            // now we decode the message
                            NewOrderSingleExample.Decode(sno, directBuffer, bufferOffset, actingBlockLengthFix, actingVersionFix);
                            break;

                        case "qatsbeengine":
                            try
                            {
                                SbeReflectionWrapper _Wrapper = new SBEReflection.SbeReflectionWrapper();
                                SbeLoader.Load(@"C:\Users\Akio\source\repos\POC_SBE\packages\sbe-tool.1.17.0\tools\fixp-entrypoint-messages-1.2.xml");
                                Console.WriteLine(_Wrapper.DecodeSBEMessageQATEngine(bytes));
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.Message);
                            }
                            break;

                        case "reflection":
                            try
                            {
                                SbeReflectionWrapper _Wrapper = new SBEReflection.SbeReflectionWrapper(@"C:\Users\Akio\source\repos\POC_SBE\fixp-entrypoint-messages-1.2\bin\Debug\fixp-entrypoint-messages-1.2.dll");
                                SbeLoader.Load(@"C:\Users\Akio\source\repos\POC_SBE\packages\sbe-tool.1.17.0\tools\fixp-entrypoint-messages-1.2.xml");
                                Console.WriteLine(_Wrapper.DecodeSBEMessage(bytes));
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.Message);
                            }
                            break;
                        }
                    }

                    // Shutdown and end connection
                    client.Close();
                }
            }
            catch (SocketException e)
            {
                Console.WriteLine("SocketException: {0}", e);
            }
            finally
            {
                // Stop listening for new clients.
                server.Stop();
            }

            Console.WriteLine("\nHit enter to continue...");
            Console.Read();
        }