Пример #1
0
 public static async Task <TrainDataFile[]> ReadSpecialJsonDataAsync(string path)
 {
     using (var streamReader = new StreamReader(path, encoding))
     {
         return(await TrainInfoReader.GetSpecialTrainDatasAsync(streamReader.ReadToEnd()));
     }
 }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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の入力が正しくありません。");
            }
        }