Exemplo n.º 1
0
        private Task HandleMessage(Response response)
        {
            return(Task.Run(() =>
            {
                lock (mutex)
                {
                    Request request;

                    if (outstandingRequests.TryGetValue(response.CorrelationId, out request))
                    {
                        try
                        {
                            var image = ImageHandling.ByteToImage(response.ImageData);

                            if (image.Width == 120 && image.Height == 120)
                            {
                                g.FillRectangle(Brushes.Aquamarine, request.RenderArea);
                                g.DrawImage(image, request.RenderArea.X, request.RenderArea.Y);

                                pbResults.InvokeAction(pb =>
                                {
                                    pb.Image = output;
                                });

                                txtInfo.InvokeAction(txt =>
                                {
                                    txt.Text = String.Format("Total {0:n0}ms\r\n\r\nRendered by:\r\n{1}", timer.ElapsedMilliseconds, String.Join("\r\n", participatingRenderers.Select(s => s).OrderBy(s => s)));
                                });

                                owners[request.RenderArea.X / 120, request.RenderArea.Y / 120] = response.ServerName;

                                participatingRenderers.Add(response.ServerName + " :-)");
                            }
                            else
                            {
                                participatingRenderers.Add(response.ServerName + " :-(");
                            }
                        }
                        catch (Exception ex)
                        {
                            participatingRenderers.Add(response.ServerName + " EXCEPTION");
                        }
                    }
                }
            }));
        }
Exemplo n.º 2
0
        private Task HandleMessage(Request request)
        {
            textBox1.InvokeAction(tb => tb.AppendText(String.Format("{0}\r\n", request.CorrelationId)));

            return(Task.Run(() =>
            {
                var timer = Stopwatch.StartNew();

                var image = new Bitmap(request.RenderArea.Width, request.RenderArea.Height);

                double x, y, x1, y1, xx, xmin, xmax, ymin, ymax = 0.0;

                int looper, s, z = 0;
                double integralX, integralY = 0.0;
                xmin = request.Viewport.StartX;
                ymin = request.Viewport.StartY;
                xmax = request.Viewport.EndX;
                ymax = request.Viewport.EndY;
                integralX = (xmax - xmin) / request.TotalWidth;
                integralY = (ymax - ymin) / request.TotalHeight;
                x = xmin;

                for (s = 0; s < request.TotalWidth; s++)
                {
                    y = ymin;

                    for (z = 0; z < request.TotalHeight; z++)
                    {
                        if (request.RenderArea.X <= s && s < request.RenderArea.X + request.RenderArea.Width &&
                            request.RenderArea.Y <= z && z < request.RenderArea.Y + request.RenderArea.Height)
                        {
                            // Within the viewport, so render
                            x1 = 0;
                            y1 = 0;
                            looper = 0;
                            while (looper < 100 && Math.Sqrt((x1 * x1) + (y1 * y1)) < 2)
                            {
                                looper++;
                                xx = (x1 * x1) - (y1 * y1) + x;
                                y1 = 2 * x1 * y1 + y;
                                x1 = xx;
                            }

                            // Get the percent of where the looper stopped
                            double perc = looper / (100.0);
                            // Get that part of a 255 scale
                            int val = ((int)(perc * 255));
                            // Use that number to set the color
                            image.SetPixel(s - request.RenderArea.X, z - request.RenderArea.Y, Palette[val]);
                        }

                        y += integralY;
                    }

                    x += integralX;
                }
                bus.Publish(new Response()
                {
                    CorrelationId = request.CorrelationId,
                    ImageData = ImageHandling.ImageToByte(image),
                    RenderTimeMs = timer.ElapsedMilliseconds,
                    ServerName = System.Environment.MachineName
                });
            }));
        }