Exemplo n.º 1
0
        public override Task OnDisconnected(bool stopCalled)
        {
            // test log - log user logging out of account
            Trace.WriteLine("disconnected..." + Context.ConnectionId);


            // init db
            Db db = new Db();

            // get logged in user's id
            UserDTO userDto = db.Users.Where(x => x.Username.Equals(Context.User.Identity.Name)).FirstOrDefault();
            int     userId  = userDto.Id;

            // remove from db
            if (db.OnlineUser.Any(x => x.Id.Equals(userId)))
            {
                OnlineUserDto onlineUser = db.OnlineUser.Find(userId);
                db.OnlineUser.Remove(onlineUser);
                db.SaveChanges();
            }

            // update chat - display newly logged in friends
            UpdateChat();

            // Return
            return(base.OnDisconnected(stopCalled));
        }
Exemplo n.º 2
0
        public override async Task OnDisconnectedAsync(Exception ex)
        {
            OnlineUserDto _loggedUser = GetLoggedUser();

            if (_loggedUser != null && !string.IsNullOrWhiteSpace(_loggedUser.Id))
            {
                await _onlineUsersService.RemoveUserAsync(_loggedUser.Id);
            }
            await base.OnDisconnectedAsync(ex);
        }
        private void CheckOther(LoginType loginType)
        {
            var v_user = _userService.GetByUserId(_currentUserID);

            if (v_user.RoleID == (int)Role.BlacklistUser)
            {
                LoginFailed(v_user, "您已被禁止登录", loginType);
                return;
            }

            if (v_user.ExpiryTime <= DateTime.Now)
            {
                LoginFailed(v_user, "会员到期,请续费后登录", loginType);
                return;
            }

            var onlineUsers = _onlineUserService.GetById(_currentUserID, "Fk_UserID");
            int count       = onlineUsers.Count;

            if (count == 0)
            {
            }
            else if (count < TcpServer.UserMaxLoginCount)
            {
                string ipAddress = onlineUsers.First().IPAddress;
                try
                {
                    IPAddress ip1 = IPAddress.Parse(ipAddress);
                    IPAddress ip2 = tcpSession.RemoteIPEndPoint.Address;
                    if (ip1.Equals(ip2) == false)
                    {
                        LoginFailed(v_user, "您已在其他设备登录了工具", loginType);
                        return;
                    }
                }
                catch (Exception ex)
                {
                    throw new NetworkException("解析数据库已保存的IP地址错误,ip:" + ipAddress, ex);
                }
            }
            else if (count >= TcpServer.UserMaxLoginCount)
            {
                LoginFailed(v_user, string.Format("您最多在同一设备上登录 {0} 个相同账号", TcpServer.UserMaxLoginCount), loginType);
                return;
            }

            OnlineUserDto newOnlineUser = V_User2OnlineUser(v_user);

            newOnlineUser.Key = Guid.NewGuid().ToString();
            _onlineUserToken  = newOnlineUser.Key;
            _onlineUserService.Add(newOnlineUser);
            LoginSuccess(v_user, loginType);
        }
Exemplo n.º 4
0
        private OnlineUserDto GetLoggedUser()
        {
            try
            {
                OnlineUserDto user = new OnlineUserDto();
                if (Context.User.Claims.Any())
                {
                    user.Id = Context.User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value;
                }

                return(user);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
Exemplo n.º 5
0
        public override async Task OnConnectedAsync()
        {
            OnlineUserDto _loggedUser = GetLoggedUser();

            if (!string.IsNullOrWhiteSpace(_loggedUser.Id))
            {
                if (_onlineUsersService.IsUserOnline(_loggedUser.Id))
                {
                    _loggedUser.ConnectionId = Context.ConnectionId;
                }
                else
                {
                    _loggedUser.ConnectionId = Context.ConnectionId;
                    await _onlineUsersService.AddOnlineUserAsync(_loggedUser);
                }
            }
            await base.OnConnectedAsync();
        }
Exemplo n.º 6
0
        public async Task <OnlineUserDto> AddOnlineUserAsync(OnlineUserDto onlineUserToAdd)
        {
            _logger.LogDebug("Trying to add online user.");
            if (onlineUserToAdd == null)
            {
                throw new ArgumentNullException(nameof(onlineUserToAdd));
            }
            try
            {
                OnlineUser userToAdd = _mapper.Map <OnlineUser>(onlineUserToAdd);
                OnlineUser addedUser = await _onlineUsersRepository.AddAsync(userToAdd);

                await _onlineUsersRepository.SaveAsync();

                return(_mapper.Map <OnlineUserDto>(addedUser));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error occured during adding the user.");
                throw;
            }
        }
Exemplo n.º 7
0
 public OnlineUserViewModel(OnlineUserDto dto)
 {
     Id           = dto.Id;
     ConnectionId = dto.ConnectionId;
 }
Exemplo n.º 8
0
        public override Task OnConnected()
        {
            // test log - log user connection
            // Trace.WriteLine("here i am..." + Context.ConnectionId);

            Db db = new Db();

            // get logged in user's id
            UserDTO userDto = db.Users.Where(x => x.Username.Equals(Context.User.Identity.Name)).FirstOrDefault();
            int     userId  = userDto.Id;

            // get connection id
            string connId = Context.ConnectionId;

            // add online dto
            if (!db.OnlineUser.Any(x => x.Id == userId))
            {
                OnlineUserDto onlineUser = new OnlineUserDto();

                onlineUser.Id           = userId;
                onlineUser.ConnectionId = connId;

                db.OnlineUser.Add(onlineUser);
                db.SaveChanges();
            }


            // get all onnline ids
            List <int> onlineIds = db.OnlineUser.ToArray().Select(x => x.Id).ToList();

            // get friend ids
            List <int> friendsIds1 = db.Friends.Where(x => x.User1 == userId && x.Active == true)
                                     .ToArray().Select(x => x.User2).ToList();

            List <int> friendsIds2 = db.Friends.Where(x => x.User2 == userId && x.Active == true)
                                     .ToArray().Select(x => x.User1).ToList();

            List <int> allFriendIds = friendsIds1.Concat(friendsIds2).ToList();

            // get final set of ids
            List <int> resultList = onlineIds.Where((i) => allFriendIds.Contains(i)).ToList();

            // create a dictionary of friend ids and usernames
            Dictionary <int, string> friends = new Dictionary <int, string>();

            foreach (var id in resultList)
            {
                var    users  = db.Users.Find(id);
                string friend = users.Username;

                if (!friends.ContainsKey(id))
                {
                    friends.Add(id, friend);
                }
            }

            var transformed = from key in friends.Keys
                              select new { id = key, friend = friends[key] };
            string json = JsonConvert.SerializeObject(transformed);

            // set clients
            var clients = Clients.Caller;

            // call js function
            clients.getonlinefriends(Context.User.Identity.Name, json);

            UpdateChat();

            // return
            return(base.OnConnected());
        }