示例#1
0
        public void NormalizeType_ValueKindFalse()
        {
            var jElement = JsonSerializer.Deserialize <bool>("false");
            var value    = (bool)DotNetifyHub.NormalizeType(jElement);

            Assert.IsFalse(value);
        }
示例#2
0
        public void NormalizeType_ValueKindNull()
        {
            var jElement = JsonSerializer.Deserialize <object>("null");
            var value    = DotNetifyHub.NormalizeType(jElement);

            Assert.IsNull(value);
        }
示例#3
0
        public void NormalizeType_ValueKindNumberDouble()
        {
            var jElement = JsonSerializer.Deserialize <double>("3.14159265359");
            var value    = DotNetifyHub.NormalizeType(jElement);

            Assert.AreEqual(3.14159265359, value);
        }
示例#4
0
        public void NormalizeType_ValueKindNumberInt()
        {
            var jElement = JsonSerializer.Deserialize <int>("1991");
            var value    = DotNetifyHub.NormalizeType(jElement);

            Assert.AreEqual(1991, value);
        }
示例#5
0
        public void NormalizeType_ValueKindString()
        {
            var jElement = JsonSerializer.Deserialize <string>("\"abc1234xyz\"");
            var value    = DotNetifyHub.NormalizeType(jElement);

            Assert.AreEqual("abc1234xyz", value);
        }
示例#6
0
        public void NormalizeType_Dictionary()
        {
            var vmData = JsonSerializer.Deserialize <Dictionary <string, object> >("{\"Key1\": \"\", \"Key2\": {\"Name\": \"John\"}, \"Key3\": 99}");
            var data   = vmData?.ToDictionary(x => x.Key, x => DotNetifyHub.NormalizeType(x.Value));

            Assert.AreEqual("", data["Key1"]);
            Assert.AreEqual("John", (data["Key2"] as JObject)["Name"]);
            Assert.AreEqual((long)99, data["Key3"]);
        }
示例#7
0
        public void NormalizeType_ValueKindArray()
        {
            var jElement = JsonSerializer.Deserialize <object>("[{\"firstName\": \"John\", \"lastName\": \"Doe\", \"age\": 24 }]");
            var jArray   = (JArray)DotNetifyHub.NormalizeType(jElement);

            Assert.AreEqual("John", jArray[0]["firstName"]);
            Assert.AreEqual("Doe", jArray[0]["lastName"]);
            Assert.AreEqual(24, jArray[0]["age"]);
        }
示例#8
0
        public void NormalizeType_ValueKindObject()
        {
            var jElement = JsonSerializer.Deserialize <object>("{\"firstName\": \"John\", \"lastName\": \"Doe\", \"age\": 24 }");
            var jObject  = (JObject)DotNetifyHub.NormalizeType(jElement);

            Assert.AreEqual("John", jObject["firstName"]);
            Assert.AreEqual("Doe", jObject["lastName"]);
            Assert.AreEqual(24, jObject["age"]);
        }
示例#9
0
        public async Task <string> Request_VM(
            string vmId,
            [FromQuery] string vmArg,
            [FromServices] IVMFactory vmFactory,
            [FromServices] IHubServiceProvider hubServiceProvider,
            [FromServices] IVMServiceScopeFactory serviceScopeFactory,
            [FromServices] IHubPipeline hubPipeline,
            [FromServices] IPrincipalAccessor principalAccessor
            )
        {
            var taskCompletionSource = new TaskCompletionSource <string>(TaskCreationOptions.RunContinuationsAsynchronously);

            Task responseVM(string arg1, string arg2, string arg3)
            {
                taskCompletionSource.TrySetResult(arg3);
                return(Task.CompletedTask);
            }

            var vmController = new VMController(responseVM, vmFactory, serviceScopeFactory.CreateScope())
            {
                ResponseVMFilter = CreateRespondingVMFilter(hubPipeline, vmId, vmArg)
            };

            var httpCallerContext = InitializeContext(vmController, hubServiceProvider, principalAccessor);
            var connectionId      = httpCallerContext.ConnectionId;

            try
            {
                var hubContext = new DotNetifyHubContext(httpCallerContext, nameof(Request_VM), vmId, vmArg, BuildHeaders(), httpCallerContext.User);
                vmController.RequestVMFilter = CreateVMFilter(hubContext, hubPipeline);

                await hubPipeline.RunMiddlewaresAsync(hubContext, async ctx =>
                {
                    await vmController.OnRequestVMAsync(connectionId, ctx.VMId, ctx.Data);
                    vmController.Dispose();
                });
            }
            catch (Exception ex)
            {
                var finalEx = await hubPipeline.RunExceptionMiddlewareAsync(httpCallerContext, ex);

                if (finalEx is OperationCanceledException == false)
                {
                    taskCompletionSource.TrySetResult(DotNetifyHub.SerializeException(finalEx));
                }
            }

            return(await taskCompletionSource.Task);
        }
示例#10
0
 public MockDotNetifyHub Create()
 {
     _hub = new DotNetifyHub(
         new VMControllerFactory(_memoryCache)
     {
         ResponseDelegate = ResponseVM
     },
         new HubPrincipalAccessor(),
         new HubPipeline(_middlewareFactories, _vmFilterFactories),
         new MockHubContext()
     {
         MockHubClients = new MockHubClients {
             MockClientProxy = new MockClientProxy {
                 Hub = this
             }
         }
     })
     {
         Context = new HubCallerContext(new MockHubConnectionContext(ConnectionId))
     };
     return(this);
 }
示例#11
0
        public async Task <string> Update_VM(
            string vmId,
            [FromQuery] string vmArg,
            [FromBody] Dictionary <string, object> vmData,
            [FromServices] IVMFactory vmFactory,
            [FromServices] IHubServiceProvider hubServiceProvider,
            [FromServices] IVMServiceScopeFactory serviceScopeFactory,
            [FromServices] IHubPipeline hubPipeline,
            [FromServices] IPrincipalAccessor principalAccessor)
        {
            var taskCompletionSource1 = new TaskCompletionSource <string>();
            var taskCompletionSource2 = new TaskCompletionSource <string>();

            var vmController = new VMController((arg1, arg2, arg3) =>
            {
                if (!taskCompletionSource1.TrySetResult(arg3))
                {
                    taskCompletionSource2.TrySetResult(arg3);
                }
            }, vmFactory, serviceScopeFactory.CreateScope())
            {
                ResponseVMFilter = CreateRespondingVMFilter(hubPipeline, vmId, vmData)
            };

            var httpCallerContext = InitializeContext(vmController, hubServiceProvider, principalAccessor);
            var connectionId      = httpCallerContext.ConnectionId;

            try
            {
                var hubContext = new DotNetifyHubContext(httpCallerContext, nameof(Request_VM), vmId, vmArg, BuildHeaders(), httpCallerContext.User);
                vmController.RequestVMFilter = CreateVMFilter(hubContext, hubPipeline);

                hubPipeline.RunMiddlewares(hubContext, ctx =>
                {
                    vmController.OnRequestVM(connectionId, ctx.VMId, ctx.Data);
                    return(Task.CompletedTask);
                });
            }
            catch (Exception ex)
            {
                var finalEx = hubPipeline.RunExceptionMiddleware(httpCallerContext, ex);
                if (finalEx is OperationCanceledException == false)
                {
                    taskCompletionSource1.TrySetResult(DotNetifyHub.SerializeException(finalEx));
                }
            }

            await taskCompletionSource1.Task;

            try
            {
                var hubContext = new DotNetifyHubContext(httpCallerContext, nameof(Update_VM), vmId, vmData, BuildHeaders(), httpCallerContext.User);
                vmController.UpdateVMFilter = CreateVMFilter(hubContext, hubPipeline);

                hubPipeline.RunMiddlewares(hubContext, ctx =>
                {
                    vmController.OnUpdateVM(connectionId, ctx.VMId, ctx.Data as Dictionary <string, object>);
                    vmController.Dispose();
                    return(Task.CompletedTask);
                });
            }
            catch (Exception ex)
            {
                var finalEx = hubPipeline.RunExceptionMiddleware(httpCallerContext, ex);
                if (finalEx is OperationCanceledException == false)
                {
                    taskCompletionSource2.TrySetResult(DotNetifyHub.SerializeException(finalEx));
                }
            }

            return(await taskCompletionSource2.Task);
        }