public void TestSetup()
        {
            content = new byte[157381];

            new Random(Guid.NewGuid().GetHashCode()).NextBytes(content);

            stream = new MemoryStream(content, 0, content.Length);

            message = new HttpResponseMessage
            {
                Content = new System.Net.Http.StreamContent(stream)
                {
                    Headers =
                    {
                        ContentLength = content.Length
                    }
                }
            };

            cancellation = new CancellationTokenSource();

            maxBodySize = null;

            useStreaming = false;

            reader = new BodyReader(len => new byte[len], _ => useStreaming, () => maxBodySize, new ConsoleLog());
        }
        public void UseCustomDeserializer()
        {
            var mockObject = new
            {
                Id = 100
            };

            var mockDeserialized = new
            {
                Id = 100
            };

            var mockBodySerializer = Substitute.For <IBodySerializer>();

            mockBodySerializer.ContentType.Returns(new ContentType("application/fake"));
            mockBodySerializer.Serialize(mockObject).Returns(new byte[] { 200 });

            var mockBodyDeserializer = Substitute.For <IBodyDeserializer>();

            mockBodyDeserializer.ContentType.Returns(new ContentType("application/fake"));
            mockBodyDeserializer.Deserialize(Arg.Any <byte[]>(), mockObject.GetType()).Returns(mockDeserialized);

            var message = new Message();

            BodyWriter.Default.WriteBody(message, mockObject, mockBodySerializer);

            var bodyReader = new BodyReader();

            bodyReader.RegisterDeserializer(mockBodyDeserializer);
            var deserializedBody = bodyReader.ReadBody(message, mockObject.GetType());

            Assert.AreEqual(mockObject, deserializedBody);
        }
예제 #3
0
 public IAsyncOperation <BodyFrameReader> OpenBodyFrameReaderAsync()
 {
     return(Task.Run(async() =>
     {
         if (BodyReader == null)
         {
             if (Type == SensorType.NetworkClient)
             {
                 BodyReader = new BodyFrameReader(this, _networkClient);
             }
             else
             {
                 var bodyIndexSourceInfo = _sourceGroup.SourceInfos.Where(si => si.SourceKind == MediaFrameSourceKind.Custom);
                 foreach (var sourceInfo in bodyIndexSourceInfo)
                 {
                     MediaFrameSource customSource;
                     if (_mediaCapture.FrameSources.TryGetValue(sourceInfo.Id, out customSource) &&
                         customSource.CurrentFormat.MajorType == "Perception" &&
                         customSource.CurrentFormat.Subtype == PoseTrackingSubType)
                     {
                         var bodyMediaReader = await _mediaCapture.CreateFrameReaderAsync(customSource);
                         BodyReader = new BodyFrameReader(this, bodyMediaReader);
                         break;
                     }
                 }
             }
         }
         await BodyReader?.OpenAsync();
         return BodyReader;
     }).AsAsyncOperation());
 }
예제 #4
0
        public IAsyncAction CloseAsync()
        {
            return(Task.Run(async() =>
            {
                await BodyIndexReader?.CloseAsync();
                BodyIndexReader?.Dispose();
                BodyIndexReader = null;

                await BodyReader?.CloseAsync();
                BodyReader?.Dispose();
                BodyReader = null;

                await ColorReader?.CloseAsync();
                ColorReader?.Dispose();
                ColorReader = null;

                await DepthReader?.CloseAsync();
                DepthReader?.Dispose();
                DepthReader = null;

                AudioReader?.Close();
                AudioReader?.Dispose();
                AudioReader = null;

                _mediaCapture?.Dispose();
                _mediaCapture = null;

                _networkClient?.CloseConnection();
                _networkClient = null;

                _networkServer?.CloseConnection();
                _networkServer = null;
            }).AsAsyncAction());
        }
예제 #5
0
        private IList <RouteValue> ReadPropertiesFromBodyContent(HttpRequestBase request, BodyFormat bodyFormat)
        {
            var body       = GetRequestBody(request);
            var bodyReader = new BodyReader();

            return(bodyReader.ReadBody(body, bodyFormat));
        }
예제 #6
0
        private void ReadPropertiesFromBodyContent(HttpRequestBase request, Dictionary <string, string> actualProps)
        {
            var body = GetRequestBody(request);

            if (!string.IsNullOrEmpty(body))
            {
                var bodyReader = new BodyReader();
                bodyReader.ReadBody(body, actualProps);
            }
        }
예제 #7
0
        public MultiPartStream(string boundary)
        {
            var boundryLength = Encoding.GetByteCount(boundary);
            var boundaryBytes = new byte[BoundaryPrefix.Length + boundryLength];

            BoundaryPrefix.CopyTo(boundaryBytes, 0);
            Encoding.GetBytes(boundary, 0, boundary.Length, boundaryBytes, BoundaryPrefix.Length);

            var body = new BodyReader(boundaryBytes, (bytes, lines, bodyStartPosition, bodyLength) => OnPartReady(ReadPart(bytes, lines, bodyStartPosition, bodyLength)));
            state = new HeaderReader(boundaryBytes, body);
        }
예제 #8
0
        public void Test_References()
        {
            const string raw = "1 0 obj\n25\nendobj\n2 0 obj\n1 0 R\nendobj";
            var stream = new MemoryStream(Encoding.ASCII.GetBytes(raw));
            var reader = new BodyReader(stream, null);
            var body = reader.Read();

            var obj = body.GetIndirectObject(2, 0) as ReferenceObject;
            Assert.IsNotNull(obj);
            Assert.AreEqual(25, ((IntegerObject) obj.Value).Value);

            stream.Dispose();
        }
예제 #9
0
        public void Test_StreamReaderWithLengthInReference()
        {
            const string raw = "1 0 obj\n2\nendobj\n2 0 obj\n<</Length 1 0 R>>\nstream\r\nHi\r\nendstream\r\nendobj";
            var stream = new MemoryStream(Encoding.ASCII.GetBytes(raw));
            var reader = new BodyReader(stream, null);
            var body = reader.Read();

            var obj = body.GetIndirectObject(2, 0) as StreamObject;
            Assert.IsNotNull(obj);
            var streamContents = Encoding.ASCII.GetString(obj.Value);
            Assert.AreEqual("Hi", streamContents);

            stream.Dispose();
        }
예제 #10
0
        /// <inheritdoc cref="NativeTransport" />
        public NativeTransport([NotNull] NativeTransportSettings settings, [NotNull] ILog log)
        {
            this.settings = settings ?? throw new ArgumentNullException(nameof(settings));
            this.log      = log ?? throw new ArgumentNullException(nameof(log));

            clientProvider  = new HttpClientProvider(settings, this.log);
            timeoutProvider = new TimeoutProvider(settings.RequestAbortTimeout, this.log);
            errorHandler    = new ErrorHandler(this.log);
            bodyReader      = new BodyReader(
                settings.BufferFactory,
                len => settings.UseResponseStreaming(len),
                () => settings.MaxResponseBodySize,
                this.log);
        }
예제 #11
0
        public void Test_SimpleRead()
        {
            const string raw = "1 0 obj\n1\nendobj\n2 0 obj\n(test)\nendobj\n\n";
            var stream = new MemoryStream(Encoding.ASCII.GetBytes(raw));
            var reader = new BodyReader(stream, null);
            var body = reader.Read();

            var obj = body.GetIndirectObject(1, 0);
            Assert.IsNotNull(obj);
            Assert.AreEqual(1u, obj.Number);
            Assert.AreEqual(0u, obj.Generation);
            Assert.AreEqual(1, ((IntegerObject) obj).Value);

            obj = body.GetIndirectObject(2, 0);
            Assert.IsNotNull(obj);
            Assert.AreEqual(2u, obj.Number);
            Assert.AreEqual(0u, obj.Generation);
            Assert.AreEqual("test", ((StringObject) obj).Value);

            stream.Dispose();
        }