Пример #1
0
        static void Main(string[] args)
        {
            var client = new DiscordRpcClient("610748528528195584", pipe: discordPipe)
            {
            };

            client.Initialize();

            sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.ReuseAddress, true);
            sock.EnableBroadcast = true;
            sock.Bind(new IPEndPoint(IPAddress.Parse("0.0.0.0"), 51966));

            sock.BeginReceiveFrom(state.buffer, 0, bufSize, SocketFlags.None, ref epFrom, recv = (ar) =>
            {
                State so  = (State)ar.AsyncState;
                int bytes = sock.EndReceiveFrom(ar, ref epFrom);
                sock.BeginReceiveFrom(so.buffer, 0, bufSize, SocketFlags.None, ref epFrom, recv, so);

                pkg_header head = StructConverter.ByteArrayToStructure <pkg_header>(so.buffer);
                pkg_img img     = StructConverter.ByteArrayToStructure <pkg_img>(so.buffer);


                if (head.magic == 0xffaadd23) // Header
                {
                    name = Encoding.ASCII.GetString(head.name).TrimEnd((Char)0);
                    Console.WriteLine("Got header for " + name);
                    image           = new byte[head.img_size];
                    num_chunks_left = (int)Math.Ceiling((float)head.img_size / 32768);
                }
                else if (img.magic == 0xaabbdd32) // Image Chunk
                {
                    if (num_chunks_left == 0)
                    {
                        // Got image chunk before header, we don't want that
                        return;
                    }
                    for (int i = 0; i < img.used_size; i++)
                    {
                        image[32768 * img.index + i] = img.buffer[i];
                    }
                    num_chunks_left--;
                    if (num_chunks_left == 0)
                    {
                        Console.WriteLine("hey, got image complete :)");
                        client.SetPresence(new RichPresence()
                        {
                            Details = name,
                            State   = ":shrek:",
                        });
                        var fileStream = new FileStream("out.img", FileMode.Create);
                        fileStream.Write(image, 0, image.Length);
                        fileStream.Close();
                    }
                }
            }, state);



            Console.ReadLine();

            client.Dispose();
        }