Esempio n. 1
0
        public async Task <Result <Game, NewGameError> > NewGameAsync(WorldId worldId)
        {
            var worldFilePath = System.IO.Path.Combine(_environment.ContentRootPath, "Worlds", $"{worldId}.png");

            if (!System.IO.File.Exists(worldFilePath))
            {
                return(NewGameError.WorldNotFound);
            }

            List <Event> worldCreationEvents;

            await using (var worldStream = System.IO.File.OpenRead(worldFilePath))
            {
                worldCreationEvents = _worldSerializer.Deserialize(worldId, worldStream).ToList();
            }

            var newGameId = Guid.NewGuid().ToString();

            var gameCreationEvents = worldCreationEvents.Prepend(new RandomSeedSet(new Random().Next()));

            await _eventRepository.AddEventsAsync(newGameId, gameCreationEvents);

            var result = await _gameRepository.GetGameAsync(newGameId);

            if (result.TryGetSuccessValue(out var game))
            {
                return(Convert(game));
            }
            else
            {
                throw new InvalidOperationException("Game should been created");
            }
        }