diff --git a/AntiAircraftGun/AntiAircraftGun/FormMapWithSetAntiAircraftGuns.cs b/AntiAircraftGun/AntiAircraftGun/FormMapWithSetAntiAircraftGuns.cs index 417275c..dfd7d50 100644 --- a/AntiAircraftGun/AntiAircraftGun/FormMapWithSetAntiAircraftGuns.cs +++ b/AntiAircraftGun/AntiAircraftGun/FormMapWithSetAntiAircraftGuns.cs @@ -1,10 +1,12 @@ using Microsoft.Extensions.Logging; +using Serilog.Filters; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; +using System.Reflection.PortableExecutable; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; @@ -72,11 +74,13 @@ namespace AntiAircraftGun if (comboBoxSelectorMap.SelectedIndex == -1 || string.IsNullOrEmpty(textBoxNewMapName.Text)) { MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogInformation("При добавлении карты {0}", comboBoxSelectorMap.SelectedIndex == -1 ? "не была выбрана карта" : "не была названа карта"); return; } if (!_mapsDict.ContainsKey(comboBoxSelectorMap.Text)) { MessageBox.Show("Нет такой карты", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogInformation($"Попытка добавить несуществующую карту: {textBoxNewMapName.Text}"); return; } _mapsCollection.AddMap(textBoxNewMapName.Text, _mapsDict[comboBoxSelectorMap.Text]); @@ -91,6 +95,7 @@ namespace AntiAircraftGun private void ListBoxMaps_SelectedIndexChanged(object sender, EventArgs e) { pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); + _logger.LogInformation($"Переход на карту: {listBoxMaps.SelectedItem?.ToString() ?? string.Empty}"); } /// /// Удаление карты @@ -101,12 +106,14 @@ namespace AntiAircraftGun { if (listBoxMaps.SelectedIndex == -1) { + _logger.LogInformation($"Попытка удалить несуществующую карту: {textBoxNewMapName.Text}"); return; } if (MessageBox.Show($"Удалить карту {listBoxMaps.SelectedItem}?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { _mapsCollection.DelMap(listBoxMaps.SelectedItem?.ToString() ?? string.Empty); ReloadMaps(); + _logger.LogInformation($"Удалена карта: {listBoxMaps.SelectedItem?.ToString() ?? string.Empty}"); } } /// @@ -122,19 +129,36 @@ namespace AntiAircraftGun } private void AddAntiAircraftGun(DrawingAntiAircraftGun drawingAntiAircraftGuns) { - if (listBoxMaps.SelectedIndex == -1) + try { - return; + if (listBoxMaps.SelectedIndex == -1) + { + _logger.LogInformation($"Попытка добавления объекта на невыбранную карту"); + return; + } + if (drawingAntiAircraftGuns == null) + { + MessageBox.Show("Нужно выбрать объект перед добавлением"); + _logger.LogInformation($"Не выбран объект для добавления на карту"); + return; + } + DrawingObjectAntiAircraftGun antiAircraftGun = new DrawingObjectAntiAircraftGun(drawingAntiAircraftGuns); + if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] + antiAircraftGun != -1) + { + MessageBox.Show("Объект добавлен"); + pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); + _logger.LogInformation($"Добавлен объект {drawingAntiAircraftGuns} на карту "); + } + else + { + MessageBox.Show("Не получилось добавить объект"); + _logger.LogInformation($"Не получилось добавить объект {drawingAntiAircraftGuns} на карту "); + } } - DrawingObjectAntiAircraftGun antiAircraftGun = new DrawingObjectAntiAircraftGun(drawingAntiAircraftGuns); - if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] + antiAircraftGun != -1) + catch (StorageOverflowException ex) { - MessageBox.Show("Object added"); - pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); - } - else - { - MessageBox.Show("Cant add object"); + _logger.LogWarning($"Ошибка переполнения хранилища: {ex.Message}"); + MessageBox.Show($"Ошибка переполнения хранилища: {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); } } /// @@ -163,18 +187,22 @@ namespace AntiAircraftGun { MessageBox.Show("Объект удален"); pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); + _logger.LogInformation($"Удален объект {pos}"); } else { MessageBox.Show("Не удалось удалить объект"); + _logger.LogInformation($"Не удалось удалить объект {pos}"); } } catch (AntiAircraftGunNotFoundException ex) { + _logger.LogWarning($"Ошибка удаления: {ex.Message}"); MessageBox.Show($"Ошибка удаления {ex.Message}"); } catch (Exception ex) { + _logger.LogWarning($"Неизвестная ошибка: {ex.Message}"); MessageBox.Show($"Неизвестная ошибка {ex.Message}"); } } @@ -248,10 +276,12 @@ namespace AntiAircraftGun { _mapsCollection.SaveData(saveFileDialog.FileName); MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); + _logger.LogInformation($"Успешно сохранено в файл: {saveFileDialog.FileName}"); } catch(Exception ex) { MessageBox.Show($"Не сохранилось {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogWarning($"Ошибка сохранения в файл: {saveFileDialog.FileName}"); } } } @@ -269,10 +299,12 @@ namespace AntiAircraftGun _mapsCollection.LoadData(openFileDialog.FileName); MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); ReloadMaps(); + _logger.LogInformation($"Успешная загрузка из файла: {openFileDialog.FileName}"); } catch(Exception ex) { MessageBox.Show($"Не загрузилось {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogWarning($"Ошибка загрузки из файла: {openFileDialog.FileName}"); } } } diff --git a/AntiAircraftGun/AntiAircraftGun/MapsCollection.cs b/AntiAircraftGun/AntiAircraftGun/MapsCollection.cs index 8d88567..7db9e5c 100644 --- a/AntiAircraftGun/AntiAircraftGun/MapsCollection.cs +++ b/AntiAircraftGun/AntiAircraftGun/MapsCollection.cs @@ -102,7 +102,7 @@ namespace AntiAircraftGun { if (!File.Exists(filename)) { - throw new Exception("Файл не найден"); + throw new FileNotFoundException("Файл не найден"); } using (StreamReader sr = new StreamReader(filename)) { @@ -111,7 +111,7 @@ namespace AntiAircraftGun str = sr.ReadLine(); if (!str.Contains("MapsCollection")) { - throw new Exception("Формат данных в файле неправильный"); + throw new FileFormatException($"Неправильный формат данных в файле {filename}"); } while ((str = sr.ReadLine()) != null) { diff --git a/AntiAircraftGun/AntiAircraftGun/SetAntiAircraftGunsGeneric.cs b/AntiAircraftGun/AntiAircraftGun/SetAntiAircraftGunsGeneric.cs index e512797..29b3012 100644 --- a/AntiAircraftGun/AntiAircraftGun/SetAntiAircraftGunsGeneric.cs +++ b/AntiAircraftGun/AntiAircraftGun/SetAntiAircraftGunsGeneric.cs @@ -1,6 +1,8 @@ -using System; +using Serilog.Filters; +using System; using System.Collections.Generic; using System.Linq; +using System.Reflection.PortableExecutable; using System.Text; using System.Threading.Tasks; @@ -38,15 +40,8 @@ namespace AntiAircraftGun /// public int Insert(T antiAircraftGun) { - if (_places.Count < _maxCount) - { - _places.Add(antiAircraftGun); - for (int i = 0; i < _places.Count; i++) - { - if (_places[i] == antiAircraftGun) return i; - } - } - return -1; + if (_places.Count < _maxCount) return Insert(antiAircraftGun, 0); + else throw new StorageOverflowException(_maxCount); } /// /// Добавление объекта в набор на конкретную позицию @@ -56,8 +51,7 @@ namespace AntiAircraftGun /// public int Insert(T antiAircraftGun, int position) { - //TODO проверка на _maxCount - if (position < 0 || position >= _places.Count) return -1; + if (position >= _maxCount) throw new StorageOverflowException(_maxCount); _places.Insert(position, antiAircraftGun); return position; } @@ -68,9 +62,8 @@ namespace AntiAircraftGun /// public T Remove(int position) { - //TODO исключение - if (position < 0 || position >= _places.Count) return null; - if (_places[position] == null) return null; + if (position < 0 || position >= _places.Count) throw new AntiAircraftGunNotFoundException(position); ; + if (_places[position] == null) throw new AntiAircraftGunNotFoundException(position); T removed = _places[position]; _places.RemoveAt(position); return removed;