Example #1
0
        /// <summary>
        /// Creates a dotNetify hub that uses HTTP context for its hub context, and sets the response callback to a local function.
        /// </summary>
        /// <param name="vmControllerFactory">Factory of view model controllers.</param>
        /// <param name="serviceProvider">Allows to provide scoped service provider for the view models.</param>
        /// <param name="principalAccessor">Allows to pass the hub principal.</param>
        /// <param name="hubPipeline">Manages middlewares and view model filters.</param>
        /// <param name="hubResponseFactory">Factory of objects to send responses back to hub clients.</param>
        /// <param name="callType">Hub call type.</param>
        /// <param name="vmId">Identifies the view model.</param>
        /// <param name="data">View model data.</param>
        /// <returns>Hub instance.</returns>
        private IDotNetifyHubHandler CreateHubHandler(
            IVMControllerFactory vmControllerFactory,
            IHubServiceProvider hubServiceProvider,
            IPrincipalAccessor principalAccessor,
            IHubPipeline hubPipeline,
            IDotNetifyHubResponseManager hubResponseManager,
            string callType,
            string vmId,
            object data = null)
        {
            var httpCallerContext = new HttpCallerContext(HttpContext);

            if (principalAccessor is HubInfoAccessor)
            {
                var hubPrincipalAccessor = principalAccessor as HubInfoAccessor;
                hubPrincipalAccessor.Principal = HttpContext?.User;
                hubPrincipalAccessor.Context   = new DotNetifyHubContext(httpCallerContext, callType, vmId, data, null, hubPrincipalAccessor.Principal);
            }

            return(new DotNetifyHubHandler(vmControllerFactory, hubServiceProvider, principalAccessor, hubPipeline, hubResponseManager)
            {
                CallerContext = httpCallerContext,
                OnVMResponse = ResponseVMCallback
            });
        }
Example #2
0
        public async Task <string> Request_VM(
            string vmId,
            [FromQuery] string vmArg,
            [FromServices] WebApiVMControllerFactory vmControllerFactory,
            [FromServices] IHubServiceProvider hubServiceProvider,
            [FromServices] IPrincipalAccessor principalAccessor,
            [FromServices] IHubPipeline hubPipeline,
            [FromServices] IDotNetifyHubResponseManager hubResponseManager

            )
        {
            var hub = CreateHubHandler(vmControllerFactory, hubServiceProvider, principalAccessor, hubPipeline, hubResponseManager, nameof(IDotNetifyHubMethod.Request_VM), vmId, vmArg);

            try
            {
                await hub.RequestVMAsync(vmId, vmArg);

                _taskCompletionSource.TrySetResult(_responses.LastOrDefault());
                _responses.Clear();
            }
            catch (Exception ex)
            {
                _taskCompletionSource.TrySetResult(ex.Serialize());
            }

            return(await _taskCompletionSource.Task);
        }
Example #3
0
 public async Task Dispose_VM(
     string vmId,
     [FromServices] WebApiVMControllerFactory vmControllerFactory,
     [FromServices] IHubServiceProvider hubServiceProvider,
     [FromServices] IPrincipalAccessor principalAccessor,
     [FromServices] IHubPipeline hubPipeline,
     [FromServices] IDotNetifyHubResponseManager hubResponseManager
     )
 {
     var hub = CreateHubHandler(vmControllerFactory, hubServiceProvider, principalAccessor, hubPipeline, hubResponseManager, nameof(IDotNetifyHubMethod.Dispose_VM), vmId);
     await hub.DisposeVMAsync(vmId);
 }