using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Catamaran { internal class MapsCollection { /// /// Словарь (хранилище) с картами /// readonly Dictionary> _mapStorages; /// /// Возвращение списка названий карт /// public List Keys => _mapStorages.Keys.ToList(); /// /// Ширина окна отрисовки /// private readonly int _pictureWidth; /// /// Высота окна отрисовки /// private readonly int _pictureHeight; /// /// Конструктор /// /// /// /// private readonly char separatorDict = '|'; private readonly char separatorData = ';'; public MapsCollection(int pictureWidth, int pictureHeight) { _mapStorages = new Dictionary>(); _pictureWidth = pictureWidth; _pictureHeight = pictureHeight; } /// /// Добавление карты /// /// Название карты /// Карта public void AddMap(string name, AbstractMap map) { if (!_mapStorages.ContainsKey(name)) { _mapStorages.Add(name, new MapWithSetBoatsGeneric(_pictureWidth, _pictureHeight, map)); } } /// /// Удаление карты /// /// Название карты public void DelMap(string name) { _mapStorages.Remove(name); } /// /// Доступ к парковке /// /// /// public MapWithSetBoatsGeneric this[string ind] { get { _mapStorages.TryGetValue(ind, out var map); return map; } } /// /// Метод записи информации в файл /// /// Строка, которую следует записать /// Поток для записи public void SaveData(string filename) { if (File.Exists(filename)) { File.Delete(filename); } using (StreamWriter sw = new StreamWriter(filename)) { sw.WriteLine("MapsCollection"); foreach (var storage in _mapStorages) { sw.WriteLine($"{storage.Key}{separatorDict}{storage.Value.GetData(separatorDict, separatorData)}"); } } } /// /// Загрузка нформации про лодки в гавани из файла /// /// /// public void LoadData(string filename) { if (!File.Exists(filename)) { throw new FileNotFoundException(filename); } using (StreamReader sr = new StreamReader(filename)) { string str = ""; if ((str = sr.ReadLine()) == null || !str.Contains("MapsCollection")) { //если нет такой записи, то это не те данные throw new FormatException(str); } //очищаем записи _mapStorages.Clear(); while ((str = sr.ReadLine()) != null) { var elem = str.Split(separatorDict); AbstractMap map = null; switch (elem[1]) { case "SimpleMap": map = new SimpleMap(); break; case "SecondMap": map = new SecondMap(); break; } _mapStorages.Add(elem[0], new MapWithSetBoatsGeneric(_pictureWidth, _pictureHeight, map)); _mapStorages[elem[0]].LoadData(elem[2].Split(separatorData, (char)StringSplitOptions.RemoveEmptyEntries)); } } } } }