Beispiel #1
0
        /// <inheritdoc />
        public async Task <RenderResult> RenderMap(string mapPath, MapRegion region, string outputDirectory, string postfix, CancellationToken cancellationToken)
        {
            if (mapPath == null)
            {
                throw new ArgumentNullException(nameof(mapPath));
            }
            if (outputDirectory == null)
            {
                throw new ArgumentNullException(nameof(outputDirectory));
            }
            if (postfix == null)
            {
                throw new ArgumentNullException(nameof(postfix));
            }

            var mapName = ioManager.GetFileNameWithoutExtension(mapPath);
            var outFile = ioManager.ConcatPath(outputDirectory, String.Format(CultureInfo.InvariantCulture, "{0}.{1}png", mapName, postfix != null ? String.Concat(postfix, '.') : null));
            var args    = String.Format(CultureInfo.InvariantCulture, GenerateRenderCommandLine(region), mapPath);

            await ioManager.CreateDirectory(ioManager.ConcatPath("data", "minimaps"), cancellationToken).ConfigureAwait(false);

            var        output      = new StringBuilder();
            var        errorOutput = new StringBuilder();
            Task <int> processTask;

            using (var P = CreateDMMToolsProcess(output, errorOutput))
            {
                P.StartInfo.Arguments = args;

                processTask = StartAndWaitForProcessExit(P, cancellationToken);

                await processTask.ConfigureAwait(false);
            }
            var toolOutput = String.Format(CultureInfo.InvariantCulture, "Exit Code: {0}{1}StdOut:{1}{2}{1}StdErr:{1}{3}", processTask.Result, Environment.NewLine, output, errorOutput);

            bool   expectNext = false;
            string result     = null;

            foreach (var I in output.ToString().Split(' '))
            {
                var text = I.Trim();
                if (text == "saving")
                {
                    expectNext = true;
                }
                else if (expectNext && text.EndsWith(".png", StringComparison.InvariantCultureIgnoreCase))
                {
                    result = text;
                    break;
                }
                else
                {
                    expectNext = false;
                }
            }
            var rresult = new RenderResult
            {
                MapRegion   = region,
                CommandLine = args,
                ToolOutput  = toolOutput,
                InputPath   = mapPath
            };

            if (result != null)
            {
                await ioManager.MoveFile(result, outFile, cancellationToken).ConfigureAwait(false);

                rresult.OutputPath = ioManager.ResolvePath(outFile);
            }

            return(rresult);
        }