Пример #1
0
 public FakeHubUser(string userId, string connectionId, string groupName)
 {
     HubUser = new HubUser();
     _userId = userId;
     _connectionId = connectionId;
     _groupName = groupName;
 }
Пример #2
0
        public void PostChatMessage(HubUser user, string chatMessage)
        {
            Clients.All.onNewChatMessage(user, chatMessage);

            user.IsTyping = false;
            Clients.Others.onIsUserTypingChanged(user);
        }
 /// <summary>
 /// Called when a connection disconnects from this hub gracefully or due to a timeout.
 /// </summary>
 /// <param name="stopCalled">true, if stop was called on the client closing the connection gracefully;
 /// false, if the connection has been lost for longer than the
 /// <see cref="P:Microsoft.AspNet.SignalR.Configuration.IConfigurationManager.DisconnectTimeout" />.
 /// Timeouts can be caused by clients reconnecting to another SignalR server in scaleout.</param>
 /// <returns>
 /// A <see cref="T:System.Threading.Tasks.Task" />
 /// </returns>
 public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled)
 {
     try {
         Guid    userName     = RetrieveUserId();
         string  connectionId = Context.ConnectionId;
         HubUser user;
         Users.TryGetValue(userName, out user);
         if (user != null)
         {
             lock (user.ConnectionIds) {
                 user.ConnectionIds.RemoveWhere(cid => cid.Equals(connectionId));
                 if (!user.ConnectionIds.Any())
                 {
                     HubUser removedUser;
                     Users.TryRemove(userName, out removedUser);
                 }
             }
         }
     } catch {
         //Bug in SignalR causing Context.User.Identity.Name to sometime be null
         //when user disconnects, thus remove the connection manually.
         lock (Users) {
             HubUser entry = Users.Values.FirstOrDefault(v => v.ConnectionIds.Contains(Context.ConnectionId));
             if (entry != null)
             {
                 entry.ConnectionIds.Remove(Context.ConnectionId);
             }
         }
     }
     return(base.OnDisconnected(stopCalled));
 }
Пример #4
0
        public HubUser SetUser(string hubName, string name,
                               string groupName,
                               string realName, string note,
                               DateTime createTime,
                               DateTime updatedTime,
                               DateTime expireTime,
                               uint numLogin,
                               AuthType authType,
                               byte[] hashedPw,
                               byte[] securePw)
        {
            var requestData = new SoftEtherParameterCollection
            {
                { "HubName", hubName },
                { "Name", name },
                { "GroupName", groupName },
                { "Realname", SoftEtherValueType.UnicodeString, realName },
                { "Note", SoftEtherValueType.UnicodeString, note },
                { "CreatedTime", createTime },
                { "UpdatedTime", updatedTime },
                { "ExpireTime", expireTime },
                { "NumLogin", numLogin },
                { "AuthType", (int)authType },
                { "HashedKey", hashedPw },
                { "NtLmSecureHash", securePw }
            };

            var rawData = _softEther.CallMethod("SetUser", requestData);

            return(HubUser.Deserialize(rawData));
        }
Пример #5
0
        public async Task JoinRoom(string roomName, HubUser user)
        {
            if (!Rooms.ContainsKey(roomName))
            {
                Rooms.Add(roomName, new List <HubUser>());
            }

            var users = Rooms[roomName];

            user.ConnectionId = Context.ConnectionId;
            var currentUser = users.Find(u => u.Username == user.Username);

            if (currentUser == null)
            {
                users.Add(user);
                await SendMessageToGroup(new { type = "MemberJoin", data = user }, roomName);

                Rooms[roomName] = users;
            }
            else
            {
                currentUser.ConnectionId = Context.ConnectionId;
            }
            await Groups.AddToGroupAsync(Context.ConnectionId, roomName);

            await SendMessageToGroup(new { type = "MemberList", data = users }, roomName);
        }
Пример #6
0
        public static HubUser IsOnline(HubUser user)
        {
            var userid       = user.UserId;
            var connectionid = user.ConnectionId;

            return(_onlineUsers.Value.FirstOrDefault(u => u.UserId == userid || u.ConnectionId == connectionid));
        }
Пример #7
0
        public static void DeleteUser(HubUser user)
        {
            var onlineUser = IsOnline(user);

            if (onlineUser != null)
            {
                _onlineUsers.Value.Remove(onlineUser);
            }
        }
Пример #8
0
            public bool Predicate(HubUser user)
            {
                var hashedPassword = Cryptography.CreateShaHash($"{context.Password}");

                return(user != null &&
                       context.ClientId == user.ApplicationType &&
                       context.Username == user.UserName &&
                       hashedPassword == user.Password);
            }
Пример #9
0
        public void IsUserTypingChanged(bool isUserTyping)
        {
            string userID = Context.ConnectionId;

            HubUser user = null;

            if ((user = users.FirstOrDefault(u => u.ID.Equals(Context.ConnectionId))) != null)
            {
                user.IsTyping = isUserTyping;
                Clients.Others.onIsUserTypingChanged(user);
            }
        }
Пример #10
0
        public static void AddOnlineUser(HubUser hubUser)
        {
            if (OnlineUsers == null)
            {
                OnlineUsers = new List <HubUser>();
            }

            if (OnlineUsers.FirstOrDefault(p => p.ID == hubUser.ID) == null)
            {
                OnlineUsers.Add(hubUser);
            }
        }
Пример #11
0
        public HubUser DeleteUser(string hubName, string name)
        {
            var requestData = new SoftEtherParameterCollection
            {
                { "HubName", hubName },
                { "Name", name }
            };

            var rawData = _softEther.CallMethod("DeleteUser", requestData);

            return(HubUser.Deserialize(rawData));
        }
        public void RemoveHubUserConnection(HubUser user, string connectionId)
        {
            var hubUser = hubUsers.FirstOrDefault(x => x.UserId == user.UserId);

            if (hubUser != null)
            {
                var hubConnection = hubUser.HubConnections.FirstOrDefault(x => x.ConnectionId == connectionId);

                if (hubConnection != null)
                {
                    hubUser.HubConnections.Remove(hubConnection);
                }
            }
        }
    /// <summary>
    /// Called when the connection connects to this hub instance.
    /// </summary>
    /// <returns>
    /// A <see cref="T:System.Threading.Tasks.Task" />
    /// </returns>
    public override System.Threading.Tasks.Task OnConnected()
    {
        Guid    userName     = RetrieveUserId();
        string  connectionId = Context.ConnectionId;
        HubUser user         = Users.GetOrAdd(userName, _ => new HubUser {
            UserId        = userName,
            ConnectionIds = new HashSet <string>()
        });

        lock (user.ConnectionIds) {
            user.ConnectionIds.Add(connectionId);
        }
        return(base.OnConnected());
    }
Пример #14
0
        public override System.Threading.Tasks.Task OnDisconnected()
        {
            string userID = Context.ConnectionId;

            HubUser user = null;

            if ((user = users.FirstOrDefault(u => u.ID.Equals(Context.ConnectionId))) != null)
            {
                Clients.Caller.onConnectionDeinitialized();
                Clients.Others.onUserDisconnected(user.ID);
                users.Remove(user);
            }

            return(base.OnDisconnected());
        }
 private void LogNotification(NotificationGetFullApiModel notification, HubUser user = null)
 {
     try
     {
         Log.Current.Message($@"
         ================ Push Notification log ================
         User: {notification.ToUserId}
         Model type: {notification.NotificationDataType}
         Notification type: {notification.NotificationType}
         Connectioin ids: {JsonConvert.SerializeObject(user?.ConnectionIds)}
         ================ End of log ================
         ");
     }
     catch (Exception) { }
 }
Пример #16
0
        public async Task LeaveRoom(string roomName, HubUser user)
        {
            if (Rooms.ContainsKey(roomName))
            {
                var users       = Rooms[roomName] ?? new List <HubUser>();
                var currentUser = users.First(u => u.Username == user.Username);
                if (currentUser != null)
                {
                    await Groups.RemoveFromGroupAsync(Context.ConnectionId, roomName).ConfigureAwait(true);

                    users.Remove(currentUser);
                    Rooms[roomName] = users;
                    await SendMessageToGroup(new { type = "MemberList", data = users }, roomName);
                }
            }
        }
Пример #17
0
        public void InitializeConnection(string userName)
        {
            string userID = Context.ConnectionId;

            if (!users.Exists(u => u.ID.Equals(userID)))
            {
                HubUser user = new HubUser(userID, userName);
                users.Add(user);

                Clients.Caller.onConnectionInitialized(users, user);
                Clients.Others.onUserConnected(user);
            }
            else
            {
                throw new Exception();
            }
        }
Пример #18
0
        public async Task <ActionResult> Register(RegisterViewModel model)
        {
            ModelState.Remove("Id");

            if (ModelState.IsValid)
            {
                if (string.IsNullOrEmpty(model.Avatar))
                {
                    model.Avatar = "/Content/plugins/dist/img/avatar5.png";
                }
                var newUser = new ApplicationUser {
                    UserName = model.Email, Email = model.Email, FullName = model.FullName, Avartar = model.Avatar, CommonPassword = model.Password
                };
                var result = await UserManager.CreateAsync(newUser, model.Password);

                if (result.Succeeded)
                {
                    var user = await _userManager.FindByEmailAsync(model.Email);

                    var hubUser = new HubUser();
                    //{
                    //    ID = user.Id,
                    //    Email = user.Email,
                    //    UserName = user.UserName,
                    //    FullName = user.FullName,
                    //    Avatar = user.Avartar,
                    //    ConnectionId = new List<Connection>(),
                    //    Connected = false
                    //};
                    _dbContext.HubUsers.Add(hubUser);
                    _dbContext.SaveChanges();

                    var addRole = await _userManager.AddToRoleAsync(user.Id, "User");

                    if (addRole.Succeeded)
                    {
                        TempData["success"] = "Thêm mới thành viên thành công!";
                        return(RedirectToAction("Register", "Account"));
                    }
                }
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }
Пример #19
0
        /// <summary>
        /// Registering a new client will add the client to the current list of clients
        /// and save the connection id which will be used to communicate with the client.
        /// </summary>
        /// <param name="data">The player name</param>
        public void RegisterClient(string data)
        {
            lock (_syncRoot)
            {
                var user = users.FirstOrDefault(x => x.ConnectionId == Context.ConnectionId);
                if (user == null)
                {
                    user = new HubUser {
                        ConnectionId = Context.ConnectionId, Name = counter.ToString()
                    };
                    users.Add(user);
                }
                counter++;
                user.IsPlaying = false;
            }

            SendStatsUpdate();
        }
Пример #20
0
        private void CreateHubUser(OZChatDbContext context)
        {
            var user = context.Users.FirstOrDefault(p => p.Email == "*****@*****.**");

            if (user != null)
            {
                var hubUser = new HubUser();
                //{
                //    ID = user.Id,
                //    Email = user.Email,
                //    UserName = user.UserName,
                //    FullName = user.FullName,
                //    Avatar = user.Avartar,
                //    ConnectionId = new List<Connection>(),
                //    Connected = false
                //};
                context.HubUsers.Add(hubUser);
                context.SaveChanges();
            }
        }
        public void AddHubUserConnection(HubUser user, string connectionId)
        {
            var hubConnection = new HubConnection
            {
                ConnectionId      = connectionId,
                ConnectionStarted = DateTime.UtcNow
            };

            var hubUser = hubUsers.FirstOrDefault(x => x.UserId == user.UserId);

            if (hubUser != null)
            {
                hubUser.HubConnections.Add(hubConnection);
            }
            else
            {
                user.HubConnections.Add(hubConnection);
                hubUsers.Add(user);
            }
        }
Пример #22
0
        public void AddConnection(string connectionId, string userName)
        {
            lock (@lock)
            {
                HubUser existingHubUser = null;
                if (HubUserList.Any(x => x.UserName.Equals(userName)))
                {
                    existingHubUser = HubUserList.Single(x => x.UserName.Equals(userName));
                }

                if (existingHubUser != null)
                {
                    existingHubUser.Ids.Add(connectionId);
                }
                else
                {
                    HubUserList.Add(new HubUser(userName, connectionId));
                }
                Sessions.Add(new Session(DateTime.Now, userName, connectionId));
            }
        }
Пример #23
0
        public virtual void AddConnectionId(string userId, string connectionId)
        {
            lock (UsersLocker)
            {
                var user = Users.FirstOrDefault(x => x.UserId == userId);

                if (user == null)
                {
                    user = new HubUser()
                    {
                        UserId = userId,
                    };
                    Users.Add(user);
                }

                if (user.ConnectionIds.Any(x => x == connectionId) == false)
                {
                    user.ConnectionIds.Add(connectionId);
                }
            }
        }
Пример #24
0
        internal static async Task OnTokenValidated(TokenValidatedContext context)
        {
            var userService = context.HttpContext.RequestServices.GetService <IUserService <HubUser> >();

            var identity = (ClaimsIdentity)context.Principal.Identity;
            var user     = await userService.GetUserFromIssuerAsync(identity.FindFirst("iss").Value, identity.FindFirst("sub").Value, context.HttpContext.RequestAborted);

            // Create a new user if they do not exist locally fill and in the defaults.
            if (user == null)
            {
                user = new HubUser
                {
                    Name    = identity.Name,
                    Email   = identity.FindFirst("email").Value,
                    Issuer  = identity.FindFirst("iss").Value,
                    Subject = identity.FindFirst("sub").Value,
                };

                await userService.CreateUserAsync(user);
            }
        }
Пример #25
0
        public HubUser CreateUser(string hubName, string name, string password, string groupName = null,
                                  string realName = null, string note = null, DateTime?expireTime = null)
        {
            var hashPair = _softEther.CreateUserHashAndNtLm(name, password);

            var requestData = new SoftEtherParameterCollection
            {
                { "HubName", hubName },
                { "Name", name },
                { "GroupName", groupName },
                { "Realname", SoftEtherValueType.UnicodeString, realName },
                { "Note", SoftEtherValueType.UnicodeString, note },
                { "ExpireTime", expireTime },
                { "AuthType", (int)AuthType.Password },
                { "HashedKey", hashPair.Hash },
                { "NtLmSecureHash", hashPair.SaltedHash }
            };

            var rawData = _softEther.CallMethod("CreateUser", requestData);

            return(HubUser.Deserialize(rawData));
        }
        public async Task SeedAsync()
        {
            ctx.Database.EnsureCreated();

            HubUser user = await userManager.FindByEmailAsync("*****@*****.**");

            if (user == null)
            {
                user = new HubUser()
                {
                    FirstName = "Daniel",
                    LastName  = "Tassi",
                    Email     = "*****@*****.**",
                    UserName  = "******"
                };

                var result = await userManager.CreateAsync(user, "P@55w0rd!");

                if (result != IdentityResult.Success)
                {
                    throw new InvalidOperationException("Could not create new user in seeder");
                }
            }
        }
Пример #27
0
 private bool OptionalPredicateDefault(HubUser model)
 {
     return(true);
 }
Пример #28
0
 public static void AddUser(HubUser user)
 {
     DeleteUser(user);
     _onlineUsers.Value.Add(user);
 }
Пример #29
0
 public HubUser SetUser(string hubName, HubUser user)
 {
     return(SetUser(hubName, user.Name, user.GroupName, user.Realname, user.Note,
                    user.CreatedTime, user.UpdatedTime, user.ExpireTime,
                    user.NumLogin, user.AuthType, user.HashedKey, user.NtLmSecureHash));
 }
Пример #30
0
 public FakeHubUser()
 {
     HubUser = new HubUser();
     SetDefaults();
 }