Exemple #1
0
        public async Task Get(int id)
        {
            Response.Headers.Add("Content-Type", "text/event-stream");
            Models.Report resp = new Models.Report()
            {
                id = id
            };
            int retry = 5;

            try
            {
                while (retry > 0)
                {
                    lock (DomainInfoHostedService.Engine.Cache.Reports)
                    {
                        var match = DomainInfoHostedService.Engine.Cache.Reports.SingleOrDefault(s => s.ID == id);
                        if (match == null)
                        {
                            resp.info = "No partial results yet";
                        }
                        else
                        {
                            resp.Load(match);
                            if (match.Complete)
                            {
                                resp.info = "Complete!";
                                retry     = 0;
                            }
                            else
                            {
                                resp.info = $"{(resp.reports == null ? 0 : match.TaskReports.Count)} partial result/s";
                            }
                        }
                    }
                    byte[] messageBytes = ASCIIEncoding.ASCII.GetBytes(JsonConvert.SerializeObject(resp));
                    await Response.Body.WriteAsync(messageBytes, 0, messageBytes.Length);

                    await Response.Body.FlushAsync();

                    if (retry == 0)
                    {
                        break;
                    }

                    await Task.Delay(TimeSpan.FromSeconds(3));

                    retry--;
                }
            }
            catch (Exception ex)
            {
                resp.info = $"Error:{ex.Message} : {ex.StackTrace}";
                byte[] messageBytes = ASCIIEncoding.ASCII.GetBytes(JsonConvert.SerializeObject(resp));
                await Response.Body.WriteAsync(messageBytes, 0, messageBytes.Length);

                await Response.Body.FlushAsync();
            }
        }
Exemple #2
0
 public Models.Report GetReport(Models.ReportRequest qp)
 {
     Models.Report resp = new Models.Report()
     {
         id = qp.Id
     };
     try
     {
         lock (DomainInfoHostedService.Engine.Cache.Reports)
         {
             var match = DomainInfoHostedService.Engine.Cache.Reports.SingleOrDefault(s => s.ID == qp.Id);
             if (match == null)
             {
                 resp.info = "No partial results yet";
                 return(resp);
             }
             if (qp.Getpartial)
             {
                 resp.Load(match);
                 resp.info = match.Complete ? "Complete!" : $"{(resp.reports == null ? 0 : match.TaskReports.Count)} partial result/s";
                 return(resp);
             }
             if (match.Complete)
             {
                 resp.Load(match);
                 resp.info = "Complete!";
                 return(resp);
             }
             resp.info = $"{(match.TaskReports.Count)} partial result/s";
         }
     }
     catch (Exception ex)
     {
         resp.info = $"Error:{ex.Message}";
     }
     return(resp);
 }