Ejemplo n.º 1
0
        public async Task CheckServiceHealthTest()
        {
            var builder        = new ServiceManagerBuilder();
            var serviceManager = builder
                                 .WithOptions(o =>
            {
                o.ConnectionString = TestConfiguration.Instance.ConnectionString;
            })
                                 .Build();

            var isHealthy = await serviceManager.IsServiceHealthy(default);
Ejemplo n.º 2
0
        public static async Task <IActionResult> SubscribeForSessionUpdatesOnSignalR(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "sessions/{sessionId}/signalr/{userId}/subscribe")] HttpRequestMessage reqMsg,
            string sessionId,
            string userId,
            [SignalR(HubName = "%Region%")] IAsyncCollector <SignalRGroupAction> signalRGroupActions,
            ILogger log)
        {
            log.LogInformation("SubscribeForSessionUpdatesOnSignalR was called.");

            // TODO: check if session with given id exists or not

            // determine browser session id from cookie:
            // TODO: this fails, probably because of cross domain restrictions on cookies:
            var browserSessionIdCookie = reqMsg.Headers.GetCookies(SessionToken).FirstOrDefault();
            var browserSessionId       = System.Guid.NewGuid().ToString();

            if (browserSessionIdCookie != null && browserSessionIdCookie.Cookies[0] != null)
            {
                browserSessionId = browserSessionIdCookie.Cookies[0].Value;
                log.LogInformation($"got cookie with session id: {browserSessionId}");
            }

            // remove users from all signalr groups:
            try{
                log.LogInformation($"About to remove user with browser session {browserSessionId} from all SignalR groups.");
                var signalRMgmtBuilder = new ServiceManagerBuilder();
                var signalRService     = signalRMgmtBuilder.WithOptions(config => { config.ConnectionString = System.Environment.GetEnvironmentVariable("AzureSignalRConnectionString", EnvironmentVariableTarget.Process); }).Build();
                var region             = System.Environment.GetEnvironmentVariable("Region", EnvironmentVariableTarget.Process);
                var signalRHub         = await signalRService.CreateHubContextAsync(region);

                await signalRHub.UserGroups.RemoveFromAllGroupsAsync(browserSessionId);

                log.LogInformation($"Removed user with browser session {browserSessionId} from all SignalR groups.");
            }
            catch (Exception e) {
                log.LogError($"Failed to remove user/browsersession ({browserSessionId}) from all signalr groups: {e.Message}");
            }

            // add user to group for specified session:
            var groupname = $"listeners-for-session-{sessionId}";

            log.LogInformation($"About to add user to group {groupname} for session {sessionId}.");
            await signalRGroupActions.AddAsync(new SignalRGroupAction {
                UserId    = userId,
                GroupName = groupname,
                Action    = GroupAction.Add
            });

            log.LogInformation($"Added user with id {userId} and browser session {browserSessionId} to SignalR group for qna session {sessionId} with group name: {groupname}");

            var signalRNegotiateBaseUrl = System.Environment.GetEnvironmentVariable("SignalRNegotiateBaseUrl", EnvironmentVariableTarget.Process).Replace("{sessionId}", sessionId);

            return(new OkWithSessionCookieObjectResult(new { SignalRNegotiateBaseUrl = signalRNegotiateBaseUrl }, browserSessionId));
        }