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)); }
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); }
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); } }
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(); }
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; } }
public OnlineUserViewModel(OnlineUserDto dto) { Id = dto.Id; ConnectionId = dto.ConnectionId; }
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()); }