private int Process(IdMappings idMappings, string mapFilePath) { Log.Information("Processing {file}", mapFilePath); using var mapFile = new GZipStream(File.OpenRead(mapFilePath), CompressionMode.Decompress); var reader = new MapReader(idMappings); try { var mapData = reader.Read(new MapDeserializer(new PositionTrackingStream(mapFile))); validator?.Validate(mapData); duplicateFinder.Process(mapData, mapFilePath); } catch (InvalidDataException e) { Log.Error(e, "Failed to process map {file}. File is most likely corrupted.", mapFilePath); return(e.HResult); } catch (ArgumentException e) { Log.Error(e, "Failed to process map {file}. File is most likely corrupted.", mapFilePath); return(e.HResult); } catch (InvalidOperationException e) { Log.Error(e, "Failed to process map {file}. File is most likely corrupted.", mapFilePath); return(e.HResult); } return(0); }
public async Task <EntityValidationResult <Map> > AddMap(Map map) { try { var result = new EntityValidationResult <Map>(); var validationResult = _validator.Validate(map); result.IsValid = validationResult.IsValid; result.Object = map; if (validationResult.IsValid) { map.Id = Guid.NewGuid(); _mapRepository.Create(map); await _mapRepository.SaveAsync(); } else { result.Errors = validationResult.Errors.Select(x => new EntityValidationFailure { PropertyName = x.PropertyName, ErrorMessage = x.ErrorMessage }).ToList(); } return(result); } catch (Exception ex) { throw ex; } }
public Maze Parse(MapTokens map) { MapDimensions mapDimensions = ParseDimensions(map.MapDimensions); IEnumerable <IEnumerable <MapObject> > mapBody = ParseMapBody(map.MapBodyValues); MapValidator mapValidator = new MapValidator(); if (!mapValidator.Validate(mapBody, mapDimensions)) { throw new Exception("Map validation has been fail"); } return(new Maze(mapBody, mapDimensions)); }