Exemplo n.º 1
0
        private void AddSegment_Click(object sender, RoutedEventArgs e)
        {
            if (string.IsNullOrWhiteSpace(NameSegment.Text))
            {
                MessageBox.Show("Имя не может быть пустым!");
                return;
            }

            if (string.IsNullOrWhiteSpace(TypeSegment.SelectedItem.ToString()))
            {
                MessageBox.Show("Тип Сегмента не может быть пустым");
                return;
            }
            if ((bool)IntoArray.IsChecked)
            {
                if (string.IsNullOrWhiteSpace(ArraySegment.Text))
                {
                    MessageBox.Show("Вы выбрали Функцию IntoArray но ArrayId - Пустой");
                    return;
                }

                PacketArray array = arrays.FirstOrDefault(n => n.ArrayId == ArraySegment.Text);
                if (array == null)
                {
                    array         = new PacketArray();
                    array.ArrayId = ArraySegment.Text;
                    array.parts   = new List <PacketPart>();
                    PacketPart part = ConstructPart();
                    array.parts.Add(part);
                    arrays.Add(array);

                    Segments.Items.Add("Создан Массив [" + array.ArrayId + "] С Сегментом " + part.Name + " (" + part.Type.ToString() + ")");
                }
                else
                {
                    PacketPart mPart = ConstructPart();
                    array.parts.Add(mPart);
                    Segments.Items.Add("Добавлен Сегмент Массива " + mPart.Name + " (" + mPart.Type.ToString() + ") Array: " + mPart.ArrayId);
                }
            }
            else
            {
                PacketPart part = ConstructPart();
                segments.Add(part);
                Segments.Items.Add("Добавлен Сегмент " + part.Name + " (" + part.Type.ToString() + ")");
            }
        }
        private void AddSegment_Click(object sender, RoutedEventArgs e)
        {
            if (string.IsNullOrWhiteSpace(NameSegment.Text))
            {
                MessageBox.Show("The name can not be empty!");
                return;
            }

            if (string.IsNullOrWhiteSpace(TypeSegment.SelectedItem.ToString()))
            {
                MessageBox.Show("Segment type can not be empty");
                return;
            }
            if ((bool)IntoArray.IsChecked)
            {
                if (string.IsNullOrWhiteSpace(ArraySegment.Text))
                {
                    MessageBox.Show("You selected the IntoArray Function but ArrayId is Empty");
                    return;
                }

                PacketArray array = arrays.FirstOrDefault(n => n.ArrayId == ArraySegment.Text);
                if (array == null)
                {
                    array         = new PacketArray();
                    array.ArrayId = ArraySegment.Text;
                    array.parts   = new List <PacketPart>();
                    PacketPart part = ConstructPart();
                    array.parts.Add(part);
                    arrays.Add(array);

                    Segments.Items.Add("Created Array [" + array.ArrayId + "] With Segment " + part.Name + " (" + part.Type.ToString() + ")");
                }
                else
                {
                    PacketPart mPart = ConstructPart();
                    array.parts.Add(mPart);
                    Segments.Items.Add("Array Segment Added " + mPart.Name + " (" + mPart.Type.ToString() + ") Array: " + mPart.ArrayId);
                }
            }
            else
            {
                PacketPart part = ConstructPart();
                segments.Add(part);
                Segments.Items.Add("Segment added " + part.Name + " (" + part.Type.ToString() + ")");
            }
        }
Exemplo n.º 3
0
        private void AddSegment_Click(object sender, RoutedEventArgs e)
        {
            if (string.IsNullOrWhiteSpace(NameSegment.Text))
            {
                MessageBox.Show("Имя не может быть пустым!");
                return;
            }

            if(string.IsNullOrWhiteSpace(TypeSegment.SelectedItem.ToString()))
            {
                MessageBox.Show("Тип Сегмента не может быть пустым");
                return;
            }
            if ((bool)IntoArray.IsChecked)
            {
                if (string.IsNullOrWhiteSpace(ArraySegment.Text))
                {
                    MessageBox.Show("Вы выбрали Функцию IntoArray но ArrayId - Пустой");
                    return;
                }

                PacketArray array = arrays.FirstOrDefault(n => n.ArrayId == ArraySegment.Text);
                if (array == null)
                {
                    array = new PacketArray();
                    array.ArrayId = ArraySegment.Text;
                    array.parts = new List<PacketPart>();
                    PacketPart part = ConstructPart();
                    array.parts.Add(part);
                    arrays.Add(array);

                    Segments.Items.Add("Создан Массив [" + array.ArrayId + "] С Сегментом " +  part.Name + " (" + part.Type.ToString() + ")");
                }
                else
                {
                    PacketPart mPart = ConstructPart();
                    array.parts.Add(mPart);
                    Segments.Items.Add("Добавлен Сегмент Массива " + mPart.Name + " (" + mPart.Type.ToString() + ") Array: " + mPart.ArrayId);
                }
            }
            else
            {
                PacketPart part = ConstructPart();
                segments.Add(part);
                Segments.Items.Add("Добавлен Сегмент " + part.Name + " (" + part.Type.ToString() + ")");
            }
        }
Exemplo n.º 4
0
        void HighlightTextAndShowParts(ArcheAgePacket packet)
        {
            PartView.Items.Clear();
            int          m_GeneralOffset  = 0;
            TextPointer  m_DocStart       = HexBox.Document.ContentStart;
            PacketReader reader           = new PacketReader(packet.data, 0);
            bool         m_BreakExtremely = false;
            TreeViewItem m_Header         = new TreeViewItem();

            if (packet.direction.Equals("[GP]"))
            {
                m_Header.Header = "Packet - Level: " + packet.data[1] + " Opcode: 0x" + BitConverter.ToInt16(packet.data, 2).ToString("X2") + " Undefined: 0x" + packet.data[0].ToString("X2");
                reader.Offset  += 4;
            }
            else
            {
                m_Header.Header = "Packet - Opcode 0x" + BitConverter.ToInt16(packet.data, 0).ToString("X2");
                reader.Offset  += 2;
            }

            if (packet.parts != null)
            {
                foreach (PacketPart part in packet.parts)
                {
                    if (m_BreakExtremely)
                    {
                        break;
                    }
                    dynamic value = null;
                    if (part.Type == PartType.None)
                    {
                        MessageBox.Show("Part Type Cannot Be Null - Packet [" + packet.name + "]");
                        Environment.Exit(0);
                        break;
                    }
                    if (part.Type == PartType.ByteArray)
                    {
                        value = "Byte[]: " + part.ByteArrayLength;
                        reader.ReadByteArray(part.ByteArrayLength);
                    }
                    if (value == null)
                    {
                        value = ReadDynamicValue(part.Type, reader);
                    }
                    bool m_BeenAtArray = false;
                    if (part.ArrayId != null && !part.ArrayId.Equals("0"))
                    {
                        //Read As Array.
                        PacketArray m_CurrentArray = packet.arrays.FirstOrDefault(n => n.ArrayId == part.ArrayId);
                        if (m_CurrentArray == null)
                        {
                            continue;
                        }
                        if (value is string)
                        {
                            continue;
                        }

                        bool         m_BreakCurrentIteration = false;
                        TreeViewItem i = new TreeViewItem();
                        i.Header = "Iterations";
                        for (int iterations = 0; iterations < (int)value; iterations++)
                        {
                            if (reader.Offset > reader.Size)
                            {
                                PartView.Items.Clear();
                                m_BreakExtremely = true;
                                MessageBox.Show("Specified Position More Than Data Length");
                                break;
                            }
                            TreeViewItem m_CurrentIteration = new TreeViewItem();
                            m_CurrentIteration.Header = "Iteration #" + iterations;
                            foreach (PacketPart p2 in m_CurrentArray.parts)
                            {
                                dynamic m_Dynamic = null;
                                if (p2.Type == PartType.ByteArray)
                                {
                                    m_Dynamic = "Byte[]: " + reader.ReadByteArray(part.ByteArrayLength).Length;
                                }
                                if (m_Dynamic == null)
                                {
                                    m_Dynamic = ReadDynamicValue(p2.Type, reader);
                                }
                                int   m_StringOffset   = 0;
                                Color m_ByteArrayColor = Colors.White;
                                if (m_Dynamic is string)
                                {
                                    if (((string)m_Dynamic).StartsWith("Byte[]"))
                                    {
                                        m_StringOffset   = part.ByteArrayLength;
                                        m_ByteArrayColor = Colors.MistyRose;
                                    }
                                    else
                                    {
                                        m_StringOffset = ((string)m_Dynamic).Length;
                                        if (p2.Type == PartType.FixedString)
                                        {
                                            m_StringOffset += 2;
                                        }
                                    }
                                }
                                HighlighterObject m_SecondHighlighter = m_StringOffset != 0 ? new HighlighterObject(m_StringOffset, m_ByteArrayColor != Colors.White ? m_ByteArrayColor : Colors.Purple) : GetNativeHighlighter(p2.Type.ToString());
                                TextRange         range = new TextRange(m_DocStart.GetPositionAtOffset(m_GeneralOffset), m_DocStart.GetPositionAtOffset(m_GeneralOffset += (m_SecondHighlighter.offset * 3 + 1)));
                                range.ApplyPropertyValue(TextElement.BackgroundProperty, new SolidColorBrush(m_SecondHighlighter.color));
                                m_CurrentIteration.Items.Add("Segment " + p2.Name + " (" + p2.Type.ToString() + ") - Value: " + m_Dynamic);
                                m_SecondHighlighter = null;
                                range = new TextRange(m_DocStart.GetPositionAtOffset(m_GeneralOffset), m_DocStart.GetPositionAtOffset(m_GeneralOffset += 3));
                                range.ApplyPropertyValue(TextElement.BackgroundProperty, new SolidColorBrush(Colors.White));
                                range = null;
                            }
                            i.Items.Add(m_CurrentIteration);
                            if (m_BreakCurrentIteration)
                            {
                                break;
                            }
                        }
                        m_Header.Items.Add(i);
                        m_BeenAtArray = true;
                    }

                    int   m_String       = 0;
                    Color bytearrayColor = Colors.White;
                    if (value is string)
                    {
                        if (((string)value).StartsWith("Byte[]"))
                        {
                            m_String       = part.ByteArrayLength;
                            bytearrayColor = Colors.MistyRose;
                        }
                        else
                        {
                            m_String = ((string)value).Length;
                            if (part.Type == PartType.FixedString)
                            {
                                m_String += 2;
                            }
                        }
                    }

                    HighlighterObject highlighter = m_String != 0 ? new HighlighterObject(m_String, bytearrayColor != Colors.White ? bytearrayColor : Colors.Purple) : GetNativeHighlighter(part.Type.ToString());
                    TextRange         h_Range     = new TextRange(m_DocStart.GetPositionAtOffset(m_GeneralOffset), m_DocStart.GetPositionAtOffset(m_GeneralOffset += (highlighter.offset * 3 + 1)));
                    h_Range.ApplyPropertyValue(TextElement.BackgroundProperty, new SolidColorBrush(highlighter.color));
                    if (!m_BeenAtArray)
                    {
                        m_Header.Items.Add("Segment " + part.Name + " (" + part.Type.ToString() + ") - Value: " + value);
                    }
                    h_Range = new TextRange(m_DocStart.GetPositionAtOffset(m_GeneralOffset), m_DocStart.GetPositionAtOffset(m_GeneralOffset += 3));
                    h_Range.ApplyPropertyValue(TextElement.BackgroundProperty, new SolidColorBrush(Colors.White));
                    h_Range = null;
                }
            }
            PartView.Items.Add(m_Header);
            reader = null;
        }