intermediat fleet loader, no processing yet.

This commit is contained in:
Torben Nehmer 2024-10-05 19:38:48 +02:00
parent 40cf280127
commit 64c99fa1a0
3 changed files with 72 additions and 20 deletions

View File

@ -96,6 +96,7 @@ public partial class CSVDataLoader : IEnableLogger
FleetManager.PostProcessImportedData();
FleetManager fleetManager = Locator.Current.GetService<FleetManager>()!;
fleetManager.InitFromDatabase();
break;
default:

View File

@ -1,16 +1,21 @@
using System;
using System.Collections.Immutable;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Reactive;
using System.Reactive.Linq;
using System.Text.RegularExpressions;
using Avalonia.Controls.Platform;
using DynamicData;
using DynamicData.Binding;
using ReactiveUI;
using Splat;
using StarsAssistant.Model;
using StarsAssistant.ViewModels;
namespace StarsAssistant.Services;
public class FleetManager
public class FleetManager : IEnableLogger
{
protected Services.Game Game = Locator.Current.GetService<Services.Game>()!;
@ -28,31 +33,75 @@ public class FleetManager
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, string>>? _fleetSummaries;
private IObservable<IChangeSet<FleetSummary>>? _fleetSummaries;
private ReadOnlyObservableCollection<FleetSummary>? summaries;
private IDisposable? d1;
private IDisposable? d2;
public void test()
{
var xxxxx = _fleets.Connect()
_fleetSummaries = _fleets.Connect()
.Filter(fleet => fleet.TrueDestination != "-- ")
.GroupOn(fleet => fleet.TrueDestination)
.Transform(group =>
group.List.Connect()
.ToCollection()
.Select(query =>
.Log(this, $"{DateTime.Now.ToLongTimeString()} fleetWatcher", grp => $"{grp.TotalChanges} detected")
.Transform(group => new FleetSummary
{
Destination = group.GroupKey,
TotalIronium = group.List.Items.Sum(f => f.Ironium),
TotalBoranium = group.List.Items.Sum(f => f.Boranium),
TotalGermanium = group.List.Items.Sum(f => f.Germanium),
TotalColonists = group.List.Items.Sum(f => f.Colonists)
})
// .Transform(group =>
// group.List.Connect()
// .QueryWhenChanged(query =>
// {
// var iro = query.Sum(f => f.Ironium);
// var bor = query.Sum(f => f.Boranium);
// var ger = query.Sum(f => f.Germanium);
// var col = query.Sum(f => f.Colonists);
// return new FleetSummary
// {
// Destination = group.GroupKey,
// TotalIronium = iro,
// TotalBoranium = bor,
// TotalGermanium = ger,
// TotalColonists = col
// };
// })
// )
;
_fleetSummaries
.ObserveOn(RxApp.MainThreadScheduler)
.Bind(out summaries)
.DisposeMany()
.Subscribe();
d1 = summaries
.Subscribe(Observer.Create<FleetSummary>(f =>
{
var iro = query.Sum(f => f.Ironium);
var bor = query.Sum(f => f.Boranium);
var ger = query.Sum(f => f.Germanium);
var col = query.Sum(f => f.Colonists);
return new FleetSummary
{
Destination = group.GroupKey,
TotalIronium = iro,
TotalBoranium = bor,
TotalGermanium = ger,
TotalColonists = col
};
})
this.Log().Debug($"FleetSummary observed: {f}");
}
));
d2 = _fleetSummaries
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe(x =>
{
var lst = x.ToList();
foreach (var f in lst)
{
this.Log().Debug($"Reason {f.Reason}, Type {f.Type}: {f.Item.Current}");
}
}
);
}

View File

@ -145,6 +145,8 @@ public class Game
__createTestData();
PlanetManager.InitFromDatabase();
FleetManager.InitFromDatabase();
FleetManager.test();
}
/// <summary>