continue fleet summary, factor out helper class.
This commit is contained in:
parent
a383f63a61
commit
d32ecdcead
14
Stars Assistant/Model/FleetSummary.cs
Normal file
14
Stars Assistant/Model/FleetSummary.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace StarsAssistant.Model;
|
||||||
|
|
||||||
|
public class FleetSummary
|
||||||
|
{
|
||||||
|
public string Destination { get; set; } = string.Empty;
|
||||||
|
public int TotalIronium { get; set; }
|
||||||
|
public int TotalBoranium { get; set; }
|
||||||
|
public int TotalGermanium { get; set; }
|
||||||
|
public int TotalColonists { get; set; }
|
||||||
|
|
||||||
|
public override string ToString() => $"To {Destination}: {TotalIronium}I/{TotalBoranium}B/{TotalGermanium}G/{TotalColonists}C";
|
||||||
|
}
|
@ -2,6 +2,7 @@ using System;
|
|||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Reactive;
|
using System.Reactive;
|
||||||
using System.Reactive.Linq;
|
using System.Reactive.Linq;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
@ -15,40 +16,39 @@ using StarsAssistant.ViewModels;
|
|||||||
|
|
||||||
namespace StarsAssistant.Services;
|
namespace StarsAssistant.Services;
|
||||||
|
|
||||||
public class FleetManager : IEnableLogger
|
public class FleetManager : IEnableLogger, IDisposable
|
||||||
{
|
{
|
||||||
protected Services.Game Game = Locator.Current.GetService<Services.Game>()!;
|
protected Services.Game Game = Locator.Current.GetService<Services.Game>()!;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// SourceCache for DynamicData views
|
/// SourceList for fleets read from the game files
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private SourceList<Fleet> _fleets = new();
|
private SourceList<Fleet> _fleets = new();
|
||||||
|
|
||||||
public FleetManager() {}
|
/// <summary>
|
||||||
|
/// Fleet data summarized by destination, will be chaned to _fleets
|
||||||
|
/// </summary>
|
||||||
|
private SourceCache<FleetSummary, string> _fleetSummaries = new(fs => fs.Destination);
|
||||||
|
|
||||||
public class FleetSummary
|
/// <summary>
|
||||||
|
/// Public accessor to the continously updated fleet summaries.
|
||||||
|
/// </summary>
|
||||||
|
public IObservableCache<FleetSummary, string> FleetSummaries => _fleetSummaries.AsObservableCache();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Disposal tracking
|
||||||
|
/// </summary>
|
||||||
|
private IDisposable _fleetSummariesSubscription;
|
||||||
|
|
||||||
|
public FleetManager()
|
||||||
{
|
{
|
||||||
public string Destination { get; set; } = string.Empty;
|
CreateFleetSummariesLink();
|
||||||
public int TotalIronium { get; set; }
|
|
||||||
public int TotalBoranium { get; set; }
|
|
||||||
public int TotalGermanium { get; set; }
|
|
||||||
public int TotalColonists { get; set; }
|
|
||||||
|
|
||||||
public override string ToString() => $"To {Destination}: {TotalIronium}I/{TotalBoranium}B/{TotalGermanium}G/{TotalColonists}C";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private IObservable<IChangeSet<FleetSummary>>? _fleetSummaries;
|
[MemberNotNull(nameof(_fleetSummariesSubscription))]
|
||||||
|
protected void CreateFleetSummariesLink()
|
||||||
private ReadOnlyObservableCollection<FleetSummary>? summaries;
|
|
||||||
|
|
||||||
private IDisposable? d1;
|
|
||||||
|
|
||||||
private IDisposable? d2;
|
|
||||||
|
|
||||||
|
|
||||||
public void test()
|
|
||||||
{
|
{
|
||||||
_fleetSummaries = _fleets.Connect()
|
_fleetSummariesSubscription = _fleets.Connect()
|
||||||
.Filter(fleet => fleet.TrueDestination != "-- ")
|
.Filter(fleet => fleet.TrueDestination != "-- ")
|
||||||
.GroupOn(fleet => fleet.TrueDestination)
|
.GroupOn(fleet => fleet.TrueDestination)
|
||||||
.Log(this, $"{DateTime.Now.ToLongTimeString()} fleetWatcher", grp => $"{grp.TotalChanges} detected")
|
.Log(this, $"{DateTime.Now.ToLongTimeString()} fleetWatcher", grp => $"{grp.TotalChanges} detected")
|
||||||
@ -60,15 +60,20 @@ public class FleetManager : IEnableLogger
|
|||||||
TotalGermanium = group.List.Items.Sum(f => f.Germanium),
|
TotalGermanium = group.List.Items.Sum(f => f.Germanium),
|
||||||
TotalColonists = group.List.Items.Sum(f => f.Colonists)
|
TotalColonists = group.List.Items.Sum(f => f.Colonists)
|
||||||
})
|
})
|
||||||
|
.AddKey(fs => fs.Destination)
|
||||||
|
.Log(this, "FleetManager _fleetSummaries update", changes =>
|
||||||
|
$"{changes.Adds} adds, {changes.Updates} updates, {changes.Removes} removes"
|
||||||
|
)
|
||||||
|
.PopulateInto(_fleetSummaries)
|
||||||
;
|
;
|
||||||
|
|
||||||
|
/*
|
||||||
// Demo only
|
// Demo only
|
||||||
var sourceCache = new SourceCache<FleetSummary, string>(fs => fs.Destination);
|
var sourceCache = new SourceCache<FleetSummary, string>(fs => fs.Destination);
|
||||||
var tmp = _fleetSummaries
|
var tmp = fleetSummaries
|
||||||
.AddKey(fs => fs.Destination)
|
.AddKey(fs => fs.Destination)
|
||||||
.PopulateInto(sourceCache);
|
.PopulateInto(sourceCache);
|
||||||
|
|
||||||
|
|
||||||
_fleetSummaries
|
_fleetSummaries
|
||||||
.ObserveOn(RxApp.MainThreadScheduler)
|
.ObserveOn(RxApp.MainThreadScheduler)
|
||||||
.Bind(out summaries)
|
.Bind(out summaries)
|
||||||
@ -93,6 +98,7 @@ public class FleetManager : IEnableLogger
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -151,4 +157,25 @@ public class FleetManager : IEnableLogger
|
|||||||
db.SaveChanges();
|
db.SaveChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Handle disposal of all subscriptions and dependencies.
|
||||||
|
/// </summary>/
|
||||||
|
protected virtual void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing)
|
||||||
|
{
|
||||||
|
_fleetSummariesSubscription.Dispose();
|
||||||
|
_fleetSummaries.Dispose();
|
||||||
|
_fleets.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Boilerplate disposal
|
||||||
|
/// </summary>
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
Dispose(true);
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user