public static async Task <TrainDataFile[]> ReadSpecialJsonDataAsync(string path) { using (var streamReader = new StreamReader(path, encoding)) { return(await TrainInfoReader.GetSpecialTrainDatasAsync(streamReader.ReadToEnd())); } }
private static async Task <Dictionary <int, TrainDataFile> > GetTrainDatas(params int[] id) { var result = new Dictionary <int, TrainDataFile>(); var stations = id.Select(n => StationReader.GetStationById(n)); var inAreaStaion = stations.Where(std => std.StationArea == 0).ToArray(); var outAreaStation = stations.Where(std => std.StationArea != 0); var count = 0; if (inAreaStaion.Any()) { TrainDataFile[] array = default; do { array = await Task.WhenAll(inAreaStaion.Select(n => TrainInfoReader.GetTrainDataAsync(n.StationId))); for (var i = 0; i < array.Length; i++) { result.Add(inAreaStaion[i].StationId, array[i]); } count++; if (count > 3) { throw new TrainDataTimeSyncException(result, "時刻が同期できません"); } if (count > 1) { Debuggers.LogWriter.WriteLog($"列車位置計算用の列車情報の時刻同期に失敗...再試行します"); } }while (!CheckTrainDataFiles(array)); } if (outAreaStation.Any()) { var need = outAreaStation.Select(std => std.StationArea).Distinct().ToArray(); var array = await Task.WhenAll(need.Select(n => TrainInfoReader.GetSpecialTrainDatasAsync(n))); foreach (var station in outAreaStation) { var index = Array.IndexOf(need, station.StationArea); result.Add(station.StationId, array[index].First(td => td.Station == station)); } } return(result); }
public async Task SaveTrainData(int id) { var jsonData = await TrainInfoReader.GetTrainDataJsonAsync(id); TrainDataFile td = null; if (id < 5) { td = await TrainInfoReader.GetTrainDataAsync(jsonData); } else { td = (await TrainInfoReader.GetSpecialTrainDatasAsync(jsonData)).FirstOrDefault(); } var path = $"{FolderPath}\\{GetSaveFileName(id, td?.GetedDateTime ?? DateTime.Now)}.json"; SaveJsonData(path, jsonData); }
private async void PreviewCurrentButton_Click(object sender, RoutedEventArgs e) { if (TryGetStationId(StationIdTextBox.Text, out var n)) { try { if (n > 5 || n == 1) { var data = await TrainInfoReader.GetTrainDataAsync(n); var trainDataFileViewer = new TrainDataFileViewer(); trainDataFileViewer.RenderData(data); trainDataFileViewer.Show(); } else { var data = await TrainInfoReader.GetSpecialTrainDatasAsync(n); var firstData = data.First(); var trainDataFileViewer = new TrainDataFileViewer(); trainDataFileViewer.RenderData(firstData); trainDataFileViewer.Show(); } } catch (System.Net.Http.HttpRequestException ex) { var result = MessageBox.Show($"データ取得中にエラーが発生しました。駅IDが不正な可能性があります。{Environment.NewLine}エラーの種類:{ex.ToString()}{Environment.NewLine}処理を続行しますか?", "エラー処理", MessageBoxButton.YesNo, MessageBoxImage.Error); if (result == MessageBoxResult.No) { throw; } } } else { MessageBox.Show("駅IDの入力が正しくありません。"); } }