diff --git a/Liner/Liner/FormMapWithSetShips.cs b/Liner/Liner/FormMapWithSetShips.cs index cb883f8..6f51468 100644 --- a/Liner/Liner/FormMapWithSetShips.cs +++ b/Liner/Liner/FormMapWithSetShips.cs @@ -1,4 +1,5 @@ -using System; +using Microsoft.Extensions.Logging; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; @@ -20,9 +21,12 @@ namespace Liner {"Болото",new SwampMap() } }; private readonly MapsCollection _mapsCollection; - public FormMapWithSetShips() + + private ILogger _logger; + public FormMapWithSetShips(ILoggerlogger) { InitializeComponent(); + _logger = logger; _mapsCollection = new MapsCollection(pictureBox.Width, pictureBox.Height); ComboBoxSelectorMap.Items.Clear(); foreach (var elem in _mapDict) @@ -66,19 +70,23 @@ namespace Liner if (_mapsCollection[ListBoxMaps.SelectedItem?.ToString() ?? string.Empty] + new DrawingObjectShip(ship) != -1) { MessageBox.Show("Объект добавлен"); + _logger.LogInformation("Добавлен объект {@Ship}", ship); pictureBox.Image = _mapsCollection[ListBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); } else { MessageBox.Show("Не удалось добавить объект"); + _logger.LogInformation("Не удалось добавить объект"); } } catch (StorageOverflowException ex) { + _logger.LogWarning("Ошибка, переполнение хранилища :{0}", ex.Message); MessageBox.Show($"Ошибка хранилище переполнено: {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (ArgumentException ex) { + _logger.LogWarning("Ошибка добавления: {0}. Объект: {@Ship}", ex.Message, ship); MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); } } @@ -99,22 +107,27 @@ namespace Liner int pos = Convert.ToInt32(maskedTextBoxPosition.Text); try { - if (_mapsCollection[ListBoxMaps.SelectedItem?.ToString() ?? string.Empty] - pos != null) + var deletedShip = _mapsCollection[ListBoxMaps.SelectedItem?.ToString() ?? string.Empty] - pos; + if (deletedShip != null) { MessageBox.Show("Объект удален"); + _logger.LogInformation("Из текущей карты удалён объект {@Ship}", deletedShip); pictureBox.Image = _mapsCollection[ListBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); } else { + _logger.LogInformation("Не удалось удалить объект по позиции {0}. Объект равен null", pos); MessageBox.Show("Не удалось удалить объект"); } } catch (ShipNotFoundException ex) { + _logger.LogWarning("Ошибка удаления: {0}", ex.Message); MessageBox.Show($"Ошибка удаления: {ex.Message}"); } catch (Exception ex) { + _logger.LogWarning("Неизвестная ошибка удаления: {0}", ex.Message); MessageBox.Show($"Неизвестная ошибка: {ex.Message}"); } } @@ -164,19 +177,23 @@ namespace Liner if (ComboBoxSelectorMap.SelectedIndex == -1 || string.IsNullOrEmpty(textBoxNewMapName.Text)) { MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogInformation("При добавлении карты {0}", ComboBoxSelectorMap.SelectedIndex == -1 ? "Не была выбрана карта" : "Не была названа карта"); return; } if (!_mapDict.ContainsKey(ComboBoxSelectorMap.Text)) { MessageBox.Show("Нет такой карты", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogInformation("Отсутствует карта с типом {0}", ComboBoxSelectorMap.Text); return; } _mapsCollection.AddMap(textBoxNewMapName.Text, _mapDict[ComboBoxSelectorMap.Text]); ReloadMaps(); + _logger.LogInformation($"Добавлена карта: {textBoxNewMapName.Text}"); } private void ListBoxMaps_SelectedIndexChanged(object sender, EventArgs e) { pictureBox.Image = _mapsCollection[ListBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); + _logger.LogInformation("Осуществлён переход на карту под названием {0}", ListBoxMaps.SelectedItem?.ToString() ?? string.Empty); } private void ButtonDeleteMap_Click(object sender, EventArgs e) { @@ -188,6 +205,7 @@ namespace Liner { _mapsCollection.DelMap(ListBoxMaps.SelectedItem?.ToString() ?? string.Empty); ReloadMaps(); + _logger.LogInformation("Удалена карта {0}", ListBoxMaps.SelectedItem?.ToString() ?? string.Empty); } } @@ -198,12 +216,15 @@ namespace Liner try { _mapsCollection.SaveData(saveFileDialog.FileName); + _logger.LogInformation("Сохранение прошло успешно. Расположение файла: {0}", saveFileDialog.FileName); MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { + MessageBox.Show($"Не сохранилось:{ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogWarning("Не удалось сохранить файл '{0}'. Текст ошибки: {1}", saveFileDialog.FileName, ex.Message); } } } @@ -215,11 +236,13 @@ namespace Liner try { _mapsCollection.LoadData(openFileDialog.FileName); + _logger.LogInformation("Загрузка данных из файла '{0}' прошла успешно", openFileDialog.FileName); ReloadMaps(); MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch(Exception ex) { + _logger.LogWarning("Не удалось загрузить файл '{0}'. Текст ошибки: {1}", openFileDialog.FileName, ex.Message); MessageBox.Show($"Не загрузилось:{ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); } } diff --git a/Liner/Liner/Liner.csproj b/Liner/Liner/Liner.csproj index 13ee123..5a83827 100644 --- a/Liner/Liner/Liner.csproj +++ b/Liner/Liner/Liner.csproj @@ -8,6 +8,19 @@ enable + + + + + + + + + + + + + True diff --git a/Liner/Liner/Program.cs b/Liner/Liner/Program.cs index 9edbf87..07ff9bc 100644 --- a/Liner/Liner/Program.cs +++ b/Liner/Liner/Program.cs @@ -1,3 +1,8 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Serilog; + namespace Liner { internal static class Program @@ -11,7 +16,27 @@ namespace Liner // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new FormMapWithSetShips()); + var services = new ServiceCollection(); + ConfigureServices(services); + using (ServiceProvider serviceProvider = services.BuildServiceProvider()) + { + Application.Run(serviceProvider.GetRequiredService()); + } + } + private static void ConfigureServices(ServiceCollection services) + { + services.AddSingleton(); + + var serilogLogger = new LoggerConfiguration() + .WriteTo.File("Log.txt") + .CreateLogger(); + + services.AddLogging(builder => + { + builder.SetMinimumLevel(LogLevel.Information); + builder.AddSerilog(logger: serilogLogger, dispose: true); + }); + } } } \ No newline at end of file diff --git a/Liner/Liner/SetShipsGeneric.cs b/Liner/Liner/SetShipsGeneric.cs index 6d682da..13a1be7 100644 --- a/Liner/Liner/SetShipsGeneric.cs +++ b/Liner/Liner/SetShipsGeneric.cs @@ -33,18 +33,13 @@ namespace Liner } public T Remove(int position) { - if (position < Count || position > 0) + if (position >= Count || position < 0) { - if (_places.ElementAt(position) != null) - { - T ship = _places[position]; - _places.RemoveAt(position); - return ship; - } throw new ShipNotFoundException(position); - } - return null; + T ship = _places[position]; + _places.RemoveAt(position); + return ship; } public T this[int position] {