Beispiel #1
0
        public override void Unload()
        {
            if (m_viewer == null)
            {
                throw new InvalidOperationException();
            }

            var view     = m_view;
            var columns  = view.Columns;
            var nColumns = columns.Count;

            var widths = new double[nColumns];
            var order  = new int[nColumns];

            for (int i = 0; i < nColumns; i++)
            {
                var column = (GridViewColumnWithId)columns[i];

                order[i] = column.ColumnId;
                widths[column.ColumnId] = column.Width;
            }

            Configuration.SetValue("Column Widths", widths);
            Configuration.SetValue("Column Order", order);
            m_view = null;

            m_viewer.ItemVisualDataQueried -= m_itemVisualDataQueriedHandler;
            m_viewer = null;
        }
Beispiel #2
0
        public void Initialize(NetworkLogViewerBase viewer)
        {
            m_viewer  = viewer;
            m_command = new PluginCommand(this, Strings.Gossip_OpenParser,
                                          new KeyGesture(Key.G, ModifierKeys.Control | ModifierKeys.Alt), Clicked);

            viewer.ProtocolChanged   += new EventHandler(viewer_ProtocolChanged);
            viewer.NetworkLogChanged += new EventHandler(viewer_NetworkLogChanged);

            this.UpdateCommand();
            Console.WriteLine("Debug: Gossip Parser initialized.");
        }
Beispiel #3
0
        public OpcodeInfoWindow(NetworkLogViewerBase viewer)
        {
            InitializeComponent();

            m_viewer = viewer;
            var window = viewer.InterfaceObject as Window;

            if (window != null)
            {
                this.Owner = window;
                this.Style = window.Style;

                var styler = window as INotifyStyleChanged;
                if (styler != null)
                {
                    styler.StyleChanged += (o, e) => this.Style = ((Window)m_viewer.InterfaceObject).Style;
                }
            }

            var fields = typeof(WowOpcodes).GetFields(BindingFlags.Static | BindingFlags.Public);

            var list = new List <string>(fields.Length);

            foreach (var field in fields)
            {
                var value = (uint)field.GetRawConstantValue();
                if (value != SpecialOpcodes.UnknownOpcode)
                {
                    list.Add(field.Name);
                }
            }
            list.Sort();

            var items = ui_cbInput.Items;

            foreach (var item in list)
            {
                items.Add(item);
            }

            this.Prepare(WowOpcodes.UNKNOWN_OPCODE);
        }
Beispiel #4
0
        public override void Load(NetworkLogViewerBase viewer)
        {
            if (m_viewer != null)
            {
                throw new InvalidOperationException();
            }

            m_viewer = viewer;
            viewer.ItemVisualDataQueried += m_itemVisualDataQueriedHandler;

            var view = m_view = new GridView();

            var nColumns = s_columnWidths.Length;
            var headers  = new string[]
            {
                NetworkStrings.CH_Number,
                NetworkStrings.CH_Time,
                NetworkStrings.CH_Ticks,
                NetworkStrings.CH_C2S,
                NetworkStrings.CH_S2C,
                NetworkStrings.CH_Length,
            };

            if (headers.Length != nColumns)
            {
                throw new InvalidOperationException();
            }

            double[] widths = Configuration.GetValue("Column Widths", (double[])null);
            if (widths == null || widths.Length != nColumns)
            {
                widths = s_columnWidths;
            }

            int[] columnOrder = Configuration.GetValue("Column Order", (int[])null);
            if (columnOrder == null || columnOrder.Length != nColumns ||
                columnOrder.Any(val => val >= nColumns || val < 0))
            {
                columnOrder = Enumerable.Range(0, nColumns).ToArray();
            }

            for (int i = 0; i < nColumns; i++)
            {
                int col = columnOrder[i];

                var item = new GridViewColumnWithId();
                item.ColumnId = col;
                item.Header   = headers[col];
                item.Width    = widths[col];

                var dataTemplate = new DataTemplate();
                dataTemplate.DataType = typeof(ItemVisualData);

                var block = new FrameworkElementFactory(typeof(TextBlock));
                block.SetValue(TextBlock.TextProperty, new Binding(s_columnBindings[col]));

                dataTemplate.VisualTree = block;
                item.CellTemplate       = dataTemplate;

                view.Columns.Add(item);
            }
        }
Beispiel #5
0
        public override void Load(NetworkLogViewerBase viewer)
        {
            if (m_viewer != null)
            {
                throw new InvalidOperationException();
            }

            // Check opcode integrity
            {
                Console.WriteLine("Debug: Protocol '{0}' build {1} checking opcode integrity...",
                                  this.CodeName, Disassembly.ClientBuild);
                var fields = typeof(WowOpcodes).GetFields(BindingFlags.Static | BindingFlags.Public);

                var list = new SortedSet <uint>();
                foreach (var field in fields)
                {
                    var value = (uint)field.GetRawConstantValue();
                    if (value != SpecialOpcodes.UnknownOpcode)
                    {
                        if (!list.Contains(value))
                        {
                            list.Add(value);
                        }
                        else
                        {
                            Console.WriteLine("Error: Protocol '{1}' duplicate opcode value {0}",
                                              value, this.CodeName);
                        }
                    }
                }
                Console.WriteLine(
                    "Debug: Integrity check complete, {0}/{1} ({2:0.00}%) known unique opcode values.",
                    list.Count,
                    fields.Length,
                    list.Count * 100.0 / fields.Length
                    );
            }

            m_viewer = viewer;
            viewer.ItemVisualDataQueried += m_itemVisualDataQueriedHandler;
            viewer.ItemParsingDone       += m_itemParsingDoneHandler;

            var view = m_view = new GridView();

            var nColumns = s_columnWidths.Length;
            var headers  = new string[]
            {
                NetworkStrings.CH_Number,
                NetworkStrings.CH_Time,
                NetworkStrings.CH_Ticks,
                Strings.CH_ConnId,
                NetworkStrings.CH_C2S,
                NetworkStrings.CH_S2C,
                NetworkStrings.CH_Length,
                Strings.CH_Preview,
            };

            if (headers.Length != nColumns)
            {
                throw new InvalidOperationException();
            }

            double[] widths = Configuration.GetValue("Column Widths", (double[])null);
            if (widths == null || widths.Length != nColumns)
            {
                widths = s_columnWidths;
            }

            int[] columnOrder = Configuration.GetValue("Column Order", (int[])null);
            if (columnOrder == null || columnOrder.Length != nColumns ||
                columnOrder.Any(val => val >= nColumns || val < 0))
            {
                columnOrder = Enumerable.Range(0, nColumns).ToArray();
            }

            if (s_customBrush == null)
            {
                s_customBrush = new SolidColorBrush(Color.FromRgb(132, 22, 35));
            }

            if (s_freezedBrush == null)
            {
                s_freezedBrush = new SolidColorBrush(Color.FromRgb(36, 176, 185));
            }

            for (int i = 0; i < nColumns; i++)
            {
                int col = columnOrder[i];

                var item = new GridViewColumnWithId();
                item.ColumnId = col;
                item.Header   = headers[col];
                item.Width    = widths[col];

                var dataTemplate = new DataTemplate();
                dataTemplate.DataType = typeof(ItemVisualData);

                var block = new FrameworkElementFactory(typeof(TextBlock));
                block.Name = "tb";
                block.SetValue(TextBlock.TextProperty, new Binding(s_columnBindings[col]));

                // Opcode
                if (col == 4 || col == 5)
                {
                    block.SetValue(TextBlock.FontFamilyProperty, new FontFamily("Lucida Console"));

                    DataTrigger trigger;

                    trigger         = new DataTrigger();
                    trigger.Binding = new Binding(".VisualData.IsCustom");
                    trigger.Value   = true;
                    trigger.Setters.Add(new Setter(TextBlock.ForegroundProperty, s_customBrush, "tb"));
                    dataTemplate.Triggers.Add(trigger);

                    trigger         = new DataTrigger();
                    trigger.Binding = new Binding(".VisualData.IsFreezed");
                    trigger.Value   = true;
                    trigger.Setters.Add(new Setter(TextBlock.ForegroundProperty, s_freezedBrush, "tb"));
                    dataTemplate.Triggers.Add(trigger);

                    trigger         = new DataTrigger();
                    trigger.Binding = new Binding(".VisualData.IsUndefinedParser");
                    trigger.Value   = true;
                    trigger.Setters.Add(new Setter(TextBlock.ForegroundProperty, Brushes.Gray, "tb"));
                    dataTemplate.Triggers.Add(trigger);
                }
                // Preview
                else if (col == 7)
                {
                    var trigger = new DataTrigger();
                    trigger.Binding = new Binding(".VisualData.ParsingError");
                    trigger.Value   = true;
                    trigger.Setters.Add(new Setter(TextBlock.ForegroundProperty, Brushes.Red, "tb"));
                    dataTemplate.Triggers.Add(trigger);
                }

                dataTemplate.VisualTree = block;
                item.CellTemplate       = dataTemplate;

                view.Columns.Add(item);
            }
        }
Beispiel #6
0
 /// <summary>
 /// When implemented in a derived class,
 /// loads the current instance of <see cref="Kamilla.Network.Protocols.Protocol"/>
 /// and attachs to the provided <see cref="Kamilla.Network.Viewing.NetworkLogViewerBase"/>.
 ///
 /// This method MUST be called from the UI thread if one exists.
 /// </summary>
 /// <param name="viewer">
 /// The instance of <see cref="Kamilla.Network.Viewing.NetworkLogViewerBase"/> to attach to.
 /// </param>
 /// <returns>
 /// The <see cref="System.Windows.Controls.ViewBase"/> that defines the appearance of packet list.
 /// </returns>
 /// <exception cref="System.InvalidOperationException">
 /// The current instance of <see cref="Kamilla.Network.Protocols.Protocol"/> is already
 /// attached to a <see cref="Kamilla.Network.Viewing.NetworkLogViewerBase"/>.
 /// </exception>
 public abstract void Load(NetworkLogViewerBase viewer);
        public GossipParserWindow(NetworkLogViewerBase viewer)
        {
            InitializeComponent();

            m_viewer = viewer;
            var window = viewer.InterfaceObject as Window;

            if (window != null)
            {
                this.Owner = window;
                this.Style = window.Style;

                var styler = window as INotifyStyleChanged;
                if (styler != null)
                {
                    styler.StyleChanged += (o, e) => this.Style = ((Window)m_viewer.InterfaceObject).Style;
                }
            }

            // Must create this in UI thread
            if (s_sqlHighlightingInfo == null)
            {
                s_sqlHighlightingInfo = new HighlightingProfile()
                {
                    Keywords = new[] { "insert", "update", "replace", "into", "values", "where", "set" },
                    KeywordsCaseSensitive      = false,
                    MultilineCommentsEndWith   = "*/",
                    MultilineCommentsStartWith = "/*",
                    OneLineCommentsStartWith   = "--",
                };
            }

            if (s_tokenBrushes == null)
            {
                s_tokenBrushes = new Brush[5];
                s_tokenBrushes[(int)CodeTokens.Keyword]          = new SolidColorBrush(Color.FromRgb(0, 0, 255));
                s_tokenBrushes[(int)CodeTokens.MultilineComment] = new SolidColorBrush(Color.FromRgb(0, 128, 0));
                s_tokenBrushes[(int)CodeTokens.Number]           = new SolidColorBrush(Color.FromRgb(255, 0, 0));
                s_tokenBrushes[(int)CodeTokens.OneLineComment]   = new SolidColorBrush(Color.FromRgb(0, 128, 0));
                s_tokenBrushes[(int)CodeTokens.String]           = new SolidColorBrush(Color.FromRgb(163, 21, 21));
            }

            this.CommandBindings.AddRange(new[]
            {
                new CommandBinding(ApplicationCommands.Close, ApplicationCommands_CloseExecuted),
                new CommandBinding(ApplicationCommands.Save, ApplicationCommands_SaveExecuted),
                new CommandBinding(ApplicationCommands.SaveAs, ApplicationCommands_SaveAsExecuted),
                new CommandBinding(GossipParserCommands.ShowObjectEntries, ApplicationCommands_ShowObjectEntriesExecuted),
                new CommandBinding(GossipParserCommands.ShowMenuEntries, ApplicationCommands_ShowMenuEntriesExecuted),
                new CommandBinding(GossipParserCommands.ShowTextEntries, ApplicationCommands_ShowTextEntriesExecuted),
            });

            this.InputBindings.AddRange(new[]
            {
                new KeyBinding(ApplicationCommands.Close, Key.X, ModifierKeys.Alt),
                new KeyBinding(ApplicationCommands.Close, Key.Escape, ModifierKeys.None),
                new KeyBinding(ApplicationCommands.Save, Key.S, ModifierKeys.Control),
                new KeyBinding(ApplicationCommands.SaveAs, Key.S, ModifierKeys.Control | ModifierKeys.Shift),
            });

            m_optItem_MouseDoubleClickHandler    = new MouseButtonEventHandler(optItem_MouseDoubleClick);
            m_lvMenus_SelectionChangedHandler    = new SelectionChangedEventHandler(ui_lvMenus_SelectionChanged);
            m_lvObjects_SelectionChangedHandler  = new SelectionChangedEventHandler(ui_lvObjects_SelectionChanged);
            m_cbAllMenus_CheckedChangedHandler   = new RoutedEventHandler(ui_cbAllMenus_CheckedChanged);
            m_cbAllObjects_CheckedChangedHandler = new RoutedEventHandler(ui_cbAllObjects_CheckedChanged);

            SetProgressBarVisible(false);

            m_parsingItemsWorker                            = new BackgroundWorker();
            m_parsingItemsWorker.DoWork                    += new DoWorkEventHandler(m_parsingItemsWorker_DoWork);
            m_parsingItemsWorker.RunWorkerCompleted        += new RunWorkerCompletedEventHandler(m_parsingItemsWorker_RunWorkerCompleted);
            m_parsingItemsWorker.WorkerReportsProgress      = true;
            m_parsingItemsWorker.ProgressChanged           += new ProgressChangedEventHandler(worker_ProgressChanged);
            m_parsingItemsWorker.WorkerSupportsCancellation = true;

            m_creatingMenuDataWorker                            = new BackgroundWorker();
            m_creatingMenuDataWorker.DoWork                    += new DoWorkEventHandler(m_creatingMenuDataWorker_DoWork);
            m_creatingMenuDataWorker.RunWorkerCompleted        += new RunWorkerCompletedEventHandler(m_creatingMenuDataWorker_RunWorkerCompleted);
            m_creatingMenuDataWorker.WorkerReportsProgress      = true;
            m_creatingMenuDataWorker.ProgressChanged           += new ProgressChangedEventHandler(worker_ProgressChanged);
            m_creatingMenuDataWorker.WorkerSupportsCancellation = true;

            ui_rtbSqlOutput.Document.PageWidth = 2000.0;

            this.NewItems(viewer.Items);
            RestoreSelectionHandlers();
        }