public void FullScan() { var sampleDataStream = TestUtils.LoadResourceStream("TestData.MapBuilder_PartialMapRead.txt"); var dataRoot = new DefReader().LoadDataFromStream(sampleDataStream, CancellationToken.None); var mapResult = new TradeMapBuilder().Build(dataRoot, CancellationToken.None); var routeScanner = new RouteScanner(); routeScanner.SetLogging(TestUtils.GetTraceLogger()); var scanResult = routeScanner.Scan(mapResult, new RouteScannerOptions(), CancellationToken.None); }
public void MapBuilder_FullRead() { var sampleDataStream = TestUtils.LoadResourceStream("TestData.MapBuilder_FullMapRead.txt"); var dataRoot = new DefReader().LoadDataFromStream(sampleDataStream); var mapResult = new TradeMapBuilder().Build(dataRoot, CancellationToken.None); }
public void MapBuilder_SimpleRead() { var sampleDataRoot = new DefNode(); var sampleDataSystem1 = new DefNode(); sampleDataRoot.ChildNodes.Add(sampleDataSystem1); sampleDataSystem1.Tokens.Add("system").Add("Tarazed"); sampleDataSystem1.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("belt").Add("1169") }); sampleDataSystem1.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("link").Add("Enif") }); sampleDataSystem1.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("trade").Add("Clothing").Add("305") }); sampleDataSystem1.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("trade").Add("Electronics").Add("761") }); sampleDataSystem1.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("trade").Add("Equipment").Add("395") }); sampleDataSystem1.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("trade").Add("Food").Add("238") }); var sampleDataSystem2 = new DefNode(); sampleDataRoot.ChildNodes.Add(sampleDataSystem2); sampleDataSystem2.Tokens.Add("system").Add("Enif"); sampleDataSystem2.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("belt").Add("1169") }); sampleDataSystem2.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("link").Add("Tarazed") }); sampleDataSystem2.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("link").Add("Sadalmelik") }); sampleDataSystem2.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("trade").Add("Clothing").Add("361") }); sampleDataSystem2.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("trade").Add("Electronics").Add("800") }); sampleDataSystem2.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("trade").Add("Equipment").Add("485") }); sampleDataSystem2.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("trade").Add("Food").Add("335") }); var sampleDataSystem3 = new DefNode(); sampleDataRoot.ChildNodes.Add(sampleDataSystem3); sampleDataSystem3.Tokens.Add("system").Add("Sadalmelik"); sampleDataSystem3.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("belt").Add("1169") }); sampleDataSystem3.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("link").Add("Enif") }); sampleDataSystem3.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("trade").Add("Clothing").Add("361") }); sampleDataSystem3.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("trade").Add("Electronics").Add("800") }); sampleDataSystem3.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("trade").Add("Equipment").Add("485") }); sampleDataSystem3.ChildNodes.Add(new DefNode() { Tokens = new DefTokenCollection().Add("trade").Add("Food").Add("335") }); var resultMap = new TradeMapBuilder().Build(sampleDataRoot, CancellationToken.None); var expectedMap = new TradeMap(); var tradeSystem1 = new TradeMapSystem(); expectedMap.Systems.Add(tradeSystem1); tradeSystem1.Name = "Tarazed"; tradeSystem1.Comodities.Add(new TradeMapComodity { Name = "Clothing", Price = 305 }); tradeSystem1.Comodities.Add(new TradeMapComodity { Name = "Electronics", Price = 761 }); tradeSystem1.Comodities.Add(new TradeMapComodity { Name = "Equipment", Price = 395 }); tradeSystem1.Comodities.Add(new TradeMapComodity { Name = "Food", Price = 238 }); var tradeSystem2 = new TradeMapSystem(); expectedMap.Systems.Add(tradeSystem2); tradeSystem2.Name = "Enif"; tradeSystem2.Comodities.Add(new TradeMapComodity { Name = "Clothing", Price = 361 }); tradeSystem2.Comodities.Add(new TradeMapComodity { Name = "Electronics", Price = 800 }); tradeSystem2.Comodities.Add(new TradeMapComodity { Name = "Equipment", Price = 485 }); tradeSystem2.Comodities.Add(new TradeMapComodity { Name = "Food", Price = 335 }); var tradeSystem3 = new TradeMapSystem(); expectedMap.Systems.Add(tradeSystem3); tradeSystem3.Name = "Sadalmelik"; tradeSystem3.Comodities.Add(new TradeMapComodity { Name = "Clothing", Price = 361 }); tradeSystem3.Comodities.Add(new TradeMapComodity { Name = "Electronics", Price = 800 }); tradeSystem3.Comodities.Add(new TradeMapComodity { Name = "Equipment", Price = 485 }); tradeSystem3.Comodities.Add(new TradeMapComodity { Name = "Food", Price = 335 }); tradeSystem1.Links.Add(new TradeMapSystemLink() { Name = "Enif", System = tradeSystem2 }); tradeSystem2.Links.Add(new TradeMapSystemLink() { Name = "Tarazed", System = tradeSystem1 }); tradeSystem2.Links.Add(new TradeMapSystemLink() { Name = "Sadalmelik", System = tradeSystem3 }); tradeSystem3.Links.Add(new TradeMapSystemLink() { Name = "Enif", System = tradeSystem2 }); // TODO assert }
//public Task<RouteScannerResults> Scan(CancellationToken ct) public RouteScannerResults Scan(CancellationToken ct) { State = ScanWorkerState.Working; try { ct.ThrowIfCancellationRequested(); // Make the root node var rootNode = new DefNode(); // Read def files var defReader = new DefReader(); defReader.ProgressEvents.ProgressEvent += new EventHandler <ProgressEventArgs>((sender, args) => { DoProgressEvent(sender, args); }); foreach (var filepath in _defFiles) { ct.ThrowIfCancellationRequested(); defReader.LoadDataFromFile(filepath, rootNode, ct); } // Build map var mapBuilder = new TradeMapBuilder(); mapBuilder.ProgressEvents.ProgressEvent += new EventHandler <ProgressEventArgs>((sender, args) => { DoProgressEvent(sender, args); }); ct.ThrowIfCancellationRequested(); var map = mapBuilder.Build(rootNode, ct); // Check that there are systems in the map if (map.Systems.Count == 0) { DoProgressEvent(this, new ProgressEventArgs(ProgressEventStatus.Error, "No systems were found. Are the correct def files selected?")); //return Task.FromResult(new RouteScannerResults() { Successful = false }); return(new RouteScannerResults() { Successful = false }); } // Scan for runs & routes var tradeScanner = new RouteScanner(); tradeScanner.ProgressEvents.ProgressEvent += new EventHandler <ProgressEventArgs>((sender, args) => { DoProgressEvent(sender, args); }); ct.ThrowIfCancellationRequested(); var results = tradeScanner.Scan(map, _options, ct); DoProgressEvent(this, new ProgressEventArgs(ProgressEventStatus.Complete, "Route scanning complete")); // Done //return Task.FromResult(results); return(results); } catch (OperationCanceledException) { // Operation was cancelled. Stop gracefully. DoProgressEvent(this, new ProgressEventArgs(ProgressEventStatus.Complete, "Cancelled")); //return Task.FromResult(new RouteScannerResults() { Successful = false }); return(new RouteScannerResults() { Successful = false }); } catch (Exception ex) { DoProgressEvent(this, new ProgressEventArgs(ProgressEventStatus.Error, $"An error occurred: {ex.GetType().ToString()}\n{ex.Message}")); //return Task.FromResult(new RouteScannerResults() { Successful = false }); return(new RouteScannerResults() { Successful = false }); } finally { State = ScanWorkerState.Idle; } }