~ruther/NosTale-PacketLogger

f312c7b73cbad331f9464538266110cec4453564 — František Boháček 2 years ago b7a938b
feat: add dispose and disconnect upon closing a tab
M src/PacketLogger/Models/Packets/CommsPacketProvider.cs => src/PacketLogger/Models/Packets/CommsPacketProvider.cs +6 -0
@@ 89,4 89,10 @@ public class CommsPacketProvider : IPacketSender
            Packets.Add(new PacketInfo(index, DateTime.Now, packetArgs.Source, packetArgs.PacketString));
        }
    }

    /// <inheritdoc />
    public void Dispose()
    {
        Packets.Dispose();
    }
}
\ No newline at end of file

M src/PacketLogger/Models/Packets/DummyPacketProvider.cs => src/PacketLogger/Models/Packets/DummyPacketProvider.cs +2 -2
@@ 70,13 70,13 @@ public class DummyPacketProvider : IPacketProvider, IDisposable
    /// <inheritdoc />
    public Task<Result> Open()
    {
        throw new System.NotImplementedException();
        return Task.FromResult(Result.FromSuccess());
    }

    /// <inheritdoc />
    public Task<Result> Close()
    {
        throw new System.NotImplementedException();
        return Task.FromResult(Result.FromSuccess());
    }

    /// <inheritdoc />

M src/PacketLogger/Models/Packets/FilePacketProvider.cs => src/PacketLogger/Models/Packets/FilePacketProvider.cs +6 -0
@@ 119,4 119,10 @@ public class FilePacketProvider : IPacketProvider

    /// <inheritdoc />
    public event PropertyChangedEventHandler? PropertyChanged;

    /// <inheritdoc/>
    public void Dispose()
    {
        _packets?.Dispose();
    }
}
\ No newline at end of file

M src/PacketLogger/Models/Packets/IPacketProvider.cs => src/PacketLogger/Models/Packets/IPacketProvider.cs +2 -1
@@ 4,6 4,7 @@
//  Copyright (c) František Boháček. All rights reserved.
//  Licensed under the MIT license. See LICENSE file in the project root for full license information.

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;


@@ 17,7 18,7 @@ namespace PacketLogger.Models.Packets;
/// <summary>
/// Provides packets from some kind of a source.
/// </summary>
public interface IPacketProvider : INotifyPropertyChanged
public interface IPacketProvider : INotifyPropertyChanged, IDisposable
{
    /// <summary>
    /// Gets whether <see cref="Open"/> was called and successfully finished.

M src/PacketLogger/ViewModels/DockFactory.cs => src/PacketLogger/ViewModels/DockFactory.cs +6 -0
@@ 44,6 44,12 @@ public class DockFactory : Factory, IDisposable
        _injector = injector;
    }

    /// <inheritdoc />
    public override IDockWindow CreateDockWindow()
    {
        return base.CreateDockWindow();
    }

    /// <summary>
    /// Gets the document dock.
    /// </summary>

M src/PacketLogger/ViewModels/LogFilterTabViewModel.cs => src/PacketLogger/ViewModels/LogFilterTabViewModel.cs +0 -1
@@ 49,7 49,6 @@ public class LogFilterTabViewModel : ViewModelBase, IDisposable
                }
            }
        );

    }

    /// <summary>

M src/PacketLogger/ViewModels/LogTabViewModel.cs => src/PacketLogger/ViewModels/LogTabViewModel.cs +5 -0
@@ 227,6 227,11 @@ public class LogTabViewModel : ViewModelBase, IDisposable
    public void Dispose()
    {
        TogglePane.Dispose();
        CopyPackets.Dispose();
        Clear.Dispose();
        _cleanUp.Dispose();

        SendFilter.Dispose();
        RecvFilter.Dispose();
    }
}
\ No newline at end of file

M src/PacketLogger/ViewModels/PacketLogDocumentViewModel.cs => src/PacketLogger/ViewModels/PacketLogDocumentViewModel.cs +21 -2
@@ 31,7 31,7 @@ using ReactiveUI;
namespace PacketLogger.ViewModels;

/// <inheritdoc />
public class PacketLogDocumentViewModel : Document, INotifyPropertyChanged
public class PacketLogDocumentViewModel : Document, INotifyPropertyChanged, IDisposable
{
    private readonly CommsInjector _injector;
    private readonly NostaleProcesses _processes;


@@ 68,7 68,7 @@ public class PacketLogDocumentViewModel : Document, INotifyPropertyChanged
            {
                var mainWindow = (App.Current!.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime)
                    ?.MainWindow;
                var result = await new OpenFileDialog()
                var result = await new OpenFileDialog
                {
                    AllowMultiple = false,
                    InitialFileName = Assembly.GetEntryAssembly()?.GetModules().FirstOrDefault()?.FullyQualifiedName


@@ 184,4 184,23 @@ public class PacketLogDocumentViewModel : Document, INotifyPropertyChanged
    /// Gets the command for opening a process / connecting to a process.
    /// </summary>
    public ReactiveCommand<NostaleProcess, Unit> OpenProcess { get; }

    /// <inheritdoc />
    public override bool OnClose()
    {
        LogViewModel?.Provider.Close().GetAwaiter().GetResult();
        Dispose();
        return base.OnClose();
    }

    /// <inheritdoc />
    public void Dispose()
    {
        _ctSource.Cancel();
        _ctSource.Dispose();
        LogViewModel?.Dispose();
        OpenDummy.Dispose();
        OpenFile.Dispose();
        OpenProcess.Dispose();
    }
}
\ No newline at end of file

Do not follow this link