csharp/AantCoder/OnlineCity/Source/ServerCore/RepositorySaveData.cs

RepositorySaveData.cs
using OCUnion;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Util;

namespace ServerOnlineCity
{
    public clast RepositorySaveData
    {
        /// 
        /// Длинна истории сохранений пользователя (макс кол-во файлов с колонией пользователя от 1)
        /// 
        public int CountSaveDataPlayer { get; } = 3;

        private Repository MainRepository;

        public RepositorySaveData(Repository repository)
        {
            MainRepository = repository;
        }

        private string GetFileNameBase(string login)
        {
            return Path.Combine(MainRepository.SaveFolderDataPlayers, Repository.NormalizeLogin(login) + ".dat");
        }

        /// 
        /// Получить данные по сохранению игры пользователя.
        /// 
        /// Логин пользователя, но основании него получается имя файла
        /// Номер сохранения, от 1 самого последнего, до CountSaveDataPlayer самого старого. Если такого файла нет, будет дан самый старый существующий
        /// Содержимое сейва игры или null если ни одного файла с данными нет.
        public byte[] LoadPlayerData(string login, int numberSave)
        {
            if (numberSave < 1 || numberSave > CountSaveDataPlayer) return null;

            var fileName = GetFileNameBase(login) + numberSave.ToString();

            var info = new FileInfo(fileName);
            if (!info.Exists || info.Length < 10) return null;

            //читаем содержимое
            bool readAsXml;
            using (var file = File.OpenRead(fileName))
            {
                var buff = new byte[10];
                file.Read(buff, 0, 10);
                readAsXml = Encoding.ASCII.GetString(buff, 0, 10).Contains("