Exemplo n.º 1
0
        static async Task SendPics()
        {
            Console.WriteLine("Loading config..");
            using (var sr = new StreamReader("config.json"))
            {
                Config = JsonConvert.DeserializeObject <Config>(await sr.ReadToEndAsync());
            }

            Console.WriteLine($"Loading pools..");
            Pools = await GetPools();

            Console.WriteLine($"Starting ZMQ thread...");
            var zqt = new Thread(new ThreadStart(ReadBlocks));

            zqt.Start();

            var igen = new ProcessStartInfo("ffmpeg");

            while (IsRunning)
            {
                var block = await BlockStream.ReceiveAsync();

                var block_hash = block.Header.GetHash().ToString();
                var block_data = block.ToBytes();

                var pixels = block_data.Length / 3;

                var sres    = (int)Math.Ceiling(Math.Sqrt(pixels));
                var padding = (sres * sres * 3) - block_data.Length;

                Console.WriteLine($"Adding {padding} bytes padding..");

                File.WriteAllBytes("block.dat", block_data.Concat(new byte[padding]).ToArray());

                igen.Arguments = $"-y -f rawvideo -pix_fmt rgb24 -s {sres}x{sres} -i block.dat -vframes 1 {block_hash}.png";

                var fp = Process.Start(igen);
                //await fp.StandardInput.BaseStream.WriteAsync(block_data.Concat(new byte[padding]));

                fp.WaitForExit();

                var btc    = block.Transactions.Sum(a => a.Outputs.Sum(b => b.Value.Satoshi * 1e-8));
                var segwit = block.Transactions.Count(a => a.HasWitness);

                var btcusd = await GetBTCPrice();

                var pool   = GetPoolInfo(block);
                var status = $"Bitcoin tip updated{(pool != null ? $" by {pool.name}" : string.Empty)}! {block_hash} ({(block_data.Length / 1000d).ToString("#,##0.00")} kB with {block.Transactions.Count.ToString("#,###")} txns, moving ₿{btc.ToString("#,##0")}, worth ${(btc * btcusd.USD).ToString("#,##0")})";

                var media = await UploadImage($"{block_hash}.png");

                if (media != null)
                {
                    var post = await PostStatus(status, new List <string> {
                        media.id
                    });

                    Console.WriteLine($"Block posted! {post.url}");
                }
            }
        }