public async Task <Response <Stream> > DetectLazyAsync(CancellationToken cancellation, Uri image, FaceDetectOptions options = default)
        {
            if (options == null)
            {
                options = new FaceDetectOptions();
            }
            Uri uri = BuildUri(options);

            PipelineCallContext context = null;

            try
            {
                context = _client.CreateContext(_options, cancellation);
                context.SetRequestLine(ServiceMethod.Post, uri);

                context.AddHeader(_keyHeader);
                context.AddHeader(Header.Common.JsonContentType);
                context.SetContent(new FaceContent(image, context));

                await _client.ProcessAsync(context).ConfigureAwait(false);

                return(new Response <Stream>(context.Response, context.Response.ContentStream));
            }
            catch
            {
                if (context != null)
                {
                    context.Dispose();
                }
                throw;
            }
        }
        public async Task <Response <FaceDetectResult> > DetectAsync(CancellationToken cancellation, string imagePath, FaceDetectOptions options)
        {
            if (options == null)
            {
                options = new FaceDetectOptions();
            }
            Uri uri = BuildUri(options);

            PipelineCallContext context = null;

            try
            {
                context = _client.CreateContext(_options, cancellation);
                context.SetRequestLine(ServiceMethod.Post, uri);

                context.AddHeader(_keyHeader);
                context.AddHeader(Header.Common.OctetStreamContentType);

                SetContentStream(context, imagePath);

                await _client.ProcessAsync(context).ConfigureAwait(false);

                ServiceResponse response = context.Response;
                if (!response.TryGetHeader(s_contentLength, out long contentLength))
                {
                    throw new Exception("bad response: no content length header");
                }

                var buffer = new byte[contentLength];
                var read   = await response.ContentStream.ReadAsync(buffer, cancellation);

                Func <ServiceResponse, FaceDetectResult> contentParser = null;
                if (response.Status == 200)
                {
                    contentParser = (rsp) => { return(FaceDetectResult.Parse(new ReadOnlySequence <byte>(buffer, 0, read))); };
                }
                return(new Response <FaceDetectResult>(response, contentParser));
            }
            catch
            {
                if (context != null)
                {
                    context.Dispose();
                }
                throw;
            }
        }
Exemple #3
0
        public async Task <Response> PutRangeAsync(long index, int length, Stream content, CancellationToken cancellation)
        {
            if (index < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(index));
            }
            if (length < 0 || length > 4 * 1024 * 1024)
            {
                throw new ArgumentOutOfRangeException(nameof(length));
            }
            if (content == null)
            {
                throw new ArgumentNullException(nameof(content));
            }
            if (content.CanRead == false)
            {
                throw new ArgumentOutOfRangeException(nameof(content));
            }
            if (content.CanSeek == false)
            {
                throw new ArgumentOutOfRangeException(nameof(content));
            }

            PipelineCallContext context = null;

            try {
                context = Pipeline.CreateContext(_options, cancellation);
                context.SetRequestLine(ServiceMethod.Put, _baseUri);

                context.AddHeader(Header.Common.CreateContentLength(content.Length));
                context.AddHeader(Header.Common.OctetStreamContentType);
                context.SetContent(PipelineContent.Create(content));

                await Pipeline.ProcessAsync(context).ConfigureAwait(false);

                return(new Response(context.Response));
            }
            catch {
                if (context != null)
                {
                    context.Dispose();
                }
                throw;
            }
        }
Exemple #4
0
        public async Task <Response> CreateAsync(CancellationToken cancellation)
        {
            PipelineCallContext context = null;

            try {
                context = Pipeline.CreateContext(_options, cancellation);
                context.SetRequestLine(ServiceMethod.Put, _baseUri);

                await Pipeline.ProcessAsync(context).ConfigureAwait(false);

                return(new Response(context.Response));
            }
            catch {
                if (context != null)
                {
                    context.Dispose();
                }
                throw;
            }
        }