private void FillValue(DirectBuffer buffer, SbeField field2, ref int offset)
        {
            if (field2.Presence.ToLower().Contains("constant"))
            {
                return;
            }

            SbeField field = field2.Clone();

            if (field.PrimitiveType == null)
            {
                field.PrimitiveType = field.Type;
            }

            if (field.PrimitiveType.ToLower().Equals("uint8"))
            {
                field2.Value = buffer.Uint8Get(offset).ToString();
                offset      += 1;
            }
            else if (field.PrimitiveType.ToLower().Equals("uint16"))
            {
                field2.Value = buffer.Uint16GetLittleEndian(offset).ToString();
                offset      += 2;
            }
            else if (field.PrimitiveType.ToLower().Equals("uint32"))
            {
                field2.Value = buffer.Uint32GetLittleEndian(offset).ToString();
                offset      += 4;
            }
            else if (field.PrimitiveType.ToLower().Equals("uint64"))
            {
                field2.Value = buffer.Uint64GetLittleEndian(offset).ToString();
                offset      += 8;
            }
            else if (field.PrimitiveType.ToLower().Equals("int8"))
            {
                field2.Value = buffer.Int8Get(offset).ToString();
                offset      += 1;
            }
            else if (field.PrimitiveType.ToLower().Equals("int16"))
            {
                field2.Value = buffer.Int16GetLittleEndian(offset).ToString();
                offset      += 2;
            }
            else if (field.PrimitiveType.ToLower().Equals("int32"))
            {
                field2.Value = buffer.Int32GetLittleEndian(offset).ToString();
                offset      += 4;
            }
            else if (field.PrimitiveType.ToLower().Equals("int64"))
            {
                field2.Value = buffer.Int64GetLittleEndian(offset).ToString();
                offset      += 8;
            }
            else if (field.PrimitiveType.ToLower().Equals("char"))
            {
                if (!String.IsNullOrEmpty(field.CharacterEncoding))
                {
                    List <byte> charString = new List <byte>();
                    for (int i = 0; i < field.Length; i++)
                    {
                        charString.Add(buffer.CharGet(offset + i));
                    }
                    field2.Value = Encoding.GetEncoding(field.CharacterEncoding).GetString(charString.ToArray());
                }
                else
                {
                    byte[] charString = Encoding.GetEncoding("UTF-8").GetBytes(field.Value);
                    buffer.CharPut(offset, charString[0]);
                }

                offset += field.Length.Value;
            }

            if (field2.Fields != null && field2.Fields.Count > 0)
            {
                if (!field2.Type.ToLower().EndsWith("encoding"))
                {
                    foreach (SbeField child in field2.Fields)
                    {
                        FillValue(buffer, child, ref offset);
                    }
                }
                else
                {
                    FillValue(buffer, field2.Fields[0], ref offset);
                    List <byte> charString = new List <byte>();
                    int         len        = int.Parse(field2.Fields[0].Value);
                    for (int i = 0; i < len; i++)
                    {
                        charString.Add(buffer.CharGet(offset + i));
                    }
                    field2.Fields[1].Value = Encoding.GetEncoding(field2.Fields[1].CharacterEncoding).GetString(charString.ToArray());
                    offset += len;
                }
            }
        }
Exemple #2
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;
        }
        private void SetField(DirectBuffer buffer, SbeField field2, ref int offset)
        {
            SbeField field = field2.Clone();

            if (field.PrimitiveType == null)
            {
                field.PrimitiveType = field.Type;
            }

            if (field.PrimitiveType.ToLower().Equals("uint8"))
            {
                if (!string.IsNullOrEmpty(field.Value))
                {
                    buffer.Uint8Put(offset, (byte)int.Parse(field.Value));
                }
                offset += 1;
            }
            else if (field.PrimitiveType.ToLower().Equals("uint16"))
            {
                if (!string.IsNullOrEmpty(field.Value))
                {
                    buffer.Uint16PutLittleEndian(offset, ushort.Parse(field.Value));
                }
                offset += 2;
            }
            else if (field.PrimitiveType.ToLower().Equals("uint32"))
            {
                if (!string.IsNullOrEmpty(field.Value))
                {
                    buffer.Uint32PutLittleEndian(offset, uint.Parse(field.Value));
                }
                offset += 4;
            }
            else if (field.PrimitiveType.ToLower().Equals("uint64"))
            {
                if (!string.IsNullOrEmpty(field.Value))
                {
                    buffer.Uint64PutLittleEndian(offset, ulong.Parse(field.Value));
                }
                offset += 8;
            }
            else if (field.PrimitiveType.ToLower().Equals("int8"))
            {
                if (!string.IsNullOrEmpty(field.Value))
                {
                    buffer.Int8Put(offset, (sbyte)int.Parse(field.Value));
                }
                offset += 1;
            }
            else if (field.PrimitiveType.ToLower().Equals("int16"))
            {
                if (!string.IsNullOrEmpty(field.Value))
                {
                    buffer.Int16PutLittleEndian(offset, short.Parse(field.Value));
                }
                offset += 2;
            }
            else if (field.PrimitiveType.ToLower().Equals("int32"))
            {
                if (!string.IsNullOrEmpty(field.Value))
                {
                    buffer.Int32PutLittleEndian(offset, int.Parse(field.Value));
                }
                offset += 4;
            }
            else if (field.PrimitiveType.ToLower().Equals("int64"))
            {
                if (!string.IsNullOrEmpty(field.Value))
                {
                    buffer.Int64PutLittleEndian(offset, long.Parse(field.Value));
                }
                offset += 8;
            }
            else if (field.PrimitiveType.ToLower().Equals("char"))
            {
                if (!string.IsNullOrEmpty(field.Value))
                {
                    if (!String.IsNullOrEmpty(field.CharacterEncoding))
                    {
                        byte[] charString = Encoding.GetEncoding(field.CharacterEncoding).GetBytes(field.Value);
                        int    temp       = offset;
                        foreach (byte m in charString)
                        {
                            buffer.CharPut(temp, m);
                            temp++;
                        }
                    }
                    else
                    {
                        byte[] charString = Encoding.GetEncoding("UTF-8").GetBytes(field.Value);
                        buffer.CharPut(offset, charString[0]);
                    }
                }
                offset += field.Length.Value;
            }
        }