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"); } } } })); }
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 }); })); }