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; } } }
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; } }