public override async Task OnConnected() { var applicationIdString = Context.QueryString[QUERY_STRING_APPLICATION_KEY]; var externalUserToken = Context.QueryString[QUERY_STRING_TOKEN_KEY]; var externalUserIPAddress = GetIPAddress(); int applicationId; string checkUserIdUrl; if (!Int32.TryParse(applicationIdString, out applicationId)) return; using (var bo = new ApplicationBusinessObject()) { var application = bo.GetById(applicationId); if (application == null) return; checkUserIdUrl = application.CheckUserIdUrl; } var externalUserId = await GetExternalUserId(checkUserIdUrl, externalUserToken, externalUserIPAddress); if (String.IsNullOrWhiteSpace(externalUserId)) return; // Check if user exists in our database using (var bo = new UserBusinessObject()) { var user = bo.GetList(x => x.ApplicationId == applicationId && x.ExternalUserId == externalUserId).FirstOrDefault(); if (user == null) return; } GroupName = applicationId + externalUserId; await Groups.Add(Context.ConnectionId, GroupName); Clients.Caller.AuthenticationSuccess(applicationId, externalUserId); Clients.Group(GroupName).UserConnected(externalUserId); await base.OnConnected(); }