~ruther/NosTale-PacketLogger

b1c19518089f0a93fb34cd09bd367e916acc0ffc — Rutherther 2 years ago d39d077
feat: allow connecting to process from menu
M src/PacketLogger/ViewModels/DockFactory.cs => src/PacketLogger/ViewModels/DockFactory.cs +4 -2
@@ 25,7 25,7 @@ namespace PacketLogger.ViewModels;
public class DockFactory : Factory, IDisposable
{
    private readonly StatefulRepository _repository;
    private readonly NostaleProcesses _processes = new();
    private readonly NostaleProcesses _processes;
    private readonly CommsInjector _injector;

    private IRootDock? _rootDock;


@@ 34,10 34,12 @@ public class DockFactory : Factory, IDisposable
    /// <summary>
    /// Initializes a new instance of the <see cref="DockFactory"/> class.
    /// </summary>
    /// <param name="processes">The nostale processes.</param>
    /// <param name="injector">The communications injector.</param>
    /// <param name="repository">The repository.</param>
    public DockFactory(CommsInjector injector, StatefulRepository repository)
    public DockFactory(NostaleProcesses processes, CommsInjector injector, StatefulRepository repository)
    {
        _processes = processes;
        _repository = repository;
        _injector = injector;
    }

M src/PacketLogger/ViewModels/MainWindowViewModel.cs => src/PacketLogger/ViewModels/MainWindowViewModel.cs +17 -0
@@ 5,6 5,7 @@
//  Licensed under the MIT license. See LICENSE file in the project root for full license information.

using System;
using System.Collections;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;


@@ 35,6 36,7 @@ namespace PacketLogger.ViewModels;
public class MainWindowViewModel : ViewModelBase, INotifyPropertyChanged
{
    private readonly DockFactory _factory;
    private readonly NostaleProcesses _processes;

    /// <summary>
    /// Initializes a new instance of the <see cref="MainWindowViewModel"/> class.


@@ 44,6 46,7 @@ public class MainWindowViewModel : ViewModelBase, INotifyPropertyChanged
        var services = new ServiceCollection()
            .AddLogging(b => b.ClearProviders().AddConsole())
            .AddSingleton<DockFactory>()
            .AddSingleton<NostaleProcesses>()
            .AddNostaleCore()
            .AddStatefulInjector()
            .AddStatefulEntity<CommsPacketProvider>()


@@ 51,6 54,7 @@ public class MainWindowViewModel : ViewModelBase, INotifyPropertyChanged
            .AddPacketResponder<PacketResponder>()
            .BuildServiceProvider();

        _processes = services.GetRequiredService<NostaleProcesses>();
        var packetTypes = services.GetRequiredService<IPacketTypesRepository>();

        var result = packetTypes.AddDefaultPackets();


@@ 141,6 145,9 @@ public class MainWindowViewModel : ViewModelBase, INotifyPropertyChanged
        OpenEmpty = ReactiveCommand.Create
            (() => _factory.CreateLoadedDocument(doc => doc.OpenDummy.Execute(Unit.Default)));

        Connect = ReactiveCommand.Create<IList>
            (process => _factory.CreateLoadedDocument(doc => doc.OpenProcess.Execute((NostaleProcess)process[0]!)));

        NewTab = ReactiveCommand.Create
            (() => _factory.DocumentDock.CreateDocument?.Execute(null));



@@ 149,6 156,11 @@ public class MainWindowViewModel : ViewModelBase, INotifyPropertyChanged
    }

    /// <summary>
    /// Gets the nostale processes.
    /// </summary>
    public ObservableCollection<NostaleProcess> Processes => _processes.Processes;

    /// <summary>
    /// Gets or sets the layout.
    /// </summary>
    public IRootDock? Layout { get; set; }


@@ 179,6 191,11 @@ public class MainWindowViewModel : ViewModelBase, INotifyPropertyChanged
    public ReactiveCommand<Unit, Unit> OpenEmpty { get; }

    /// <summary>
    /// Gets the command that opens empty logger.
    /// </summary>
    public ReactiveCommand<IList, Unit> Connect { get; }

    /// <summary>
    /// Gets the command that opens a new tab.
    /// </summary>
    public ReactiveCommand<Unit, Unit> NewTab { get; }

M src/PacketLogger/Views/MainWindow.axaml => src/PacketLogger/Views/MainWindow.axaml +12 -3
@@ 23,6 23,15 @@
            <MenuItem Header="_File">
                <MenuItem Header="_New Tab" Command="{Binding NewTab}"></MenuItem>
                <MenuItem Header="_Open Empty" Command="{Binding OpenEmpty}" />
                <MenuItem Header="_Connect..." Command="{Binding Connect}" Items="{Binding Processes}">
                    <MenuItem.Styles>
                        <Style Selector="MenuItem">
                            <Setter Property="Header" Value="{Binding CharacterString}" />
                            <Setter Property="Command" Value="{Binding Connect}" />
                            <Setter Property="CommandParameter" Value="{Binding SelectedItems, RelativeSource={RelativeSource Self}}" />
                        </Style>
                    </MenuItem.Styles>
                </MenuItem>
                <MenuItem Header="_Open File..." Command="{Binding OpenFile}" />
                <Separator />
                <MenuItem Header="_Save Filtered As..." Command="{Binding SaveFiltered}" />


@@ 31,11 40,11 @@
                <MenuItem Header="Exit" Command="{Binding QuitApplication}" />
            </MenuItem>
            <MenuItem Header="_Tools">
                <MenuItem Header="_Packet Sender"/>
                <MenuItem Header="_Packet Analyzer"/>
                <MenuItem Header="_Packet Sender" />
                <MenuItem Header="_Packet Analyzer" />
            </MenuItem>
        </Menu>
        

        <ExperimentalAcrylicBorder Grid.Row="0" Grid.Column="1" IsHitTestVisible="False">
            <ExperimentalAcrylicBorder.Material>
                <ExperimentalAcrylicMaterial

Do not follow this link