コード例 #1
0
ファイル: ImageService.cs プロジェクト: rbgx/Predix
        public void MediaOnDemand(ParkingEvent parkingEvent, string imageAssetUid, string timestamp, Customer customer)
        {
            var   media = GetMedia(imageAssetUid, timestamp);
            Image image = new Image {
                PropertyId = parkingEvent.Properties.Id
            };
            var      i         = 1;
            TimeSpan startTime = DateTime.Now.TimeOfDay;

            while (i < 6 && (image?.Entry == null || !image.Entry.Contents.Any(x => x.Status.Equals("SUCCESS", StringComparison.OrdinalIgnoreCase))))
            {
                i++;
                if (!string.IsNullOrWhiteSpace(media?.PollUrl))
                {
                    Dictionary <string, string> additionalHeaders =
                        new Dictionary <string, string> {
                        { "predix-zone-id", Endpoint.PredixZoneIdForImage }
                    };
                    var response = _predixHttpClient.GetAllAsync(media.PollUrl, additionalHeaders);
                    if (!string.IsNullOrWhiteSpace(response.Result))
                    {
                        try
                        {
                            var jsonRespone = JsonConvert.DeserializeObject <JObject>(response.Result);
                            image = jsonRespone != null
                                ? (jsonRespone).ToObject <Image>()
                                : new Image();
                        }
                        catch (Exception e)
                        {
                            Commentary.Print(e.Message);
                            Commentary.Print(response.Result);
                        }
                    }
                }
                if (image?.Entry == null ||
                    !image.Entry.Contents.Any(x => x.Status.Equals("SUCCESS", StringComparison.OrdinalIgnoreCase)))
                {
                    Commentary.Print(
                        $"Polling for Media Data {i} time after {DateTime.Now.TimeOfDay.Subtract(startTime).TotalMinutes} minutes: {media.PollUrl}",
                        true);
                    //Thread.Sleep(1000 * 60);
                    if (i < 6)
                    {
                        Task.Delay(1000 * 60).Wait(1000 * 60);
                    }

                    continue;
                }
                var imageBinary = (from content in image.Entry.Contents
                                   let additionalHeaders = new Dictionary <string, string> {
                    { "predix-zone-id", Endpoint.PredixZoneIdForImage }
                }
                                   select _predixHttpClient.GetFile(content.Url, additionalHeaders)
                                   into response
                                   select response.Result).FirstOrDefault();
                image.Base64 = imageBinary;
                image        = MarkPixelCoordinates(parkingEvent: parkingEvent, image: image, customer: customer);
            }
            if (image == null)
            {
                return;
            }
            image.PropertyId    = parkingEvent.Properties.Id;
            image.ImageAssetUid = imageAssetUid;

            image.OriginalBase64 = null;
            image.Base64         = null;

            Save(image);
            //return image.Base64;
        }