Exemplo n.º 1
0
        public void Run()
        {
            for (;;)
            {
                try {
                    var w   = default(Work);
                    var req = WebRequest.Create(host + "work");
                    req.Timeout = 10000;
                    using (var resp = req.GetResponse()) {
                        using (var s = resp.GetResponseStream()) {
                            w = Work.Open(s);
                        }
                    }

                    System.Console.WriteLine("Working on " + w.Id);

                    var r  = new Random(w.X * w.X * w.X + w.Y * w.Y * w.Y);
                    var pb = new PixelBuffer(w.Width, w.Height);
                    w.Execute(r, pb);

                    req             = WebRequest.Create(host + "work/" + w.Id + "/pixels");
                    req.Method      = "POST";
                    req.ContentType = "octet";
                    using (var s = req.GetRequestStream()) {
                        pb.SaveBinary(s);
                    }
                    using (var resp = req.GetResponse()) {
                    }
                }
                catch (WebException ex) {
                    if (ex.Status == WebExceptionStatus.ProtocolError && ((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound)
                    {
                        System.Console.WriteLine("Server says we're finished");
                        System.Threading.Thread.Sleep(2000);
                    }
                    if (ex.Status == WebExceptionStatus.ConnectFailure)
                    {
                        System.Console.WriteLine("waiting for server {0}...", host);
                        System.Threading.Thread.Sleep(2000);
                    }
                    else
                    {
                        System.Console.WriteLine("! {0}: {1}", ex.GetType().Name, ex.Message);
                        System.Threading.Thread.Sleep(50);
                    }
                }
                catch (System.Threading.ThreadAbortException) {
                    throw;
                }
                catch (Exception ex) {
                    System.Console.WriteLine(ex);
                    throw;
                }
            }
        }