Esempio n. 1
0
        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();
        }