public IActionResult Back(CardType?type)
        {
            if (type == default)
            {
                return(BadRequest("Unknown card type"));
            }

            CallCardBack ??= RenderService.RenderCardBack(Color.Black, Color.White);
            ResponseCardBack ??= RenderService.RenderCardBack(Color.White, Color.Black);

            var cardBitmap = type switch {
                CardType.Call => CallCardBack,
                CardType.Response => ResponseCardBack,
                _ => throw new InvalidOperationException(),
            };
            var cardStream = new MemoryStream();

            lock ( cardBitmap )
            {
                cardBitmap.Save(cardStream, ImageFormat.Png);
                cardStream.Seek(0, SeekOrigin.Begin);
            }

            return(File(cardStream, "image/png"));
        }
Esempio n. 2
0
        private static async Task Main(string[] args)
        {
            if (args.Length < 1)
            {
                Console.WriteLine("Usage: CardCastToImage.exe <deck codes>");
                return;
            }

            var deckCodes = args[0].Split(',');

            // Render the card backs (calls then responses)
            using (var callCardBack = RenderService.RenderCardBack(Color.Black, Color.White))
                callCardBack.Save("CallCardBack.png", ImageFormat.Png);

            using (var responseCardBack = RenderService.RenderCardBack(Color.White, Color.Black))
                responseCardBack.Save("ResponseCardBack.png", ImageFormat.Png);

            // Fetch and render all the individual decks
            foreach (var deckCode in deckCodes)
            {
                try
                {
                    Console.Write($"Attempting to fetch card deck \"{deckCode}\"...");

                    var deck = await CardCastService.GetDeckAsync(deckCode);

                    Console.WriteLine("Done!");
                    Console.Write("Rendering...");

                    // Render the card fronts (calls then responses)
                    var callCardSheets     = RenderService.RenderCardSheets(deck.Cards.Calls, deckCode, Color.Black, Color.White);
                    var responseCardSheets = RenderService.RenderCardSheets(deck.Cards.Responses, deckCode, Color.White, Color.Black);

                    foreach (var(sheetIndex, sheetBitmap) in callCardSheets.Pairs())
                    {
                        using (sheetBitmap)
                            sheetBitmap.Save($"DeckCalls-{deckCode}-{sheetIndex}.png", ImageFormat.Png);
                    }

                    foreach (var(sheetIndex, sheetBitmap) in responseCardSheets.Pairs())
                    {
                        using (sheetBitmap)
                            sheetBitmap.Save($"DeckResponses-{deckCode}-{sheetIndex}.png", ImageFormat.Png);
                    }

                    Console.WriteLine("Done!");

                    // Don't want to piss off the server timeouts
                    Thread.Sleep(1000);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error!");
                    Console.WriteLine(ex.ToString());
                }
            }

            Console.WriteLine("Done with all decks! Press any key to exit.");

            while (Console.KeyAvailable)
            {
                Console.ReadKey(true);
            }

            Console.ReadKey(true);
        }