Example #1
0
        /// <summary>
        /// Add user to list of online users and start to listen to him.
        /// </summary>
        /// <param name="user">user.</param>
        public void AddUser(OnlineUser user)
        {
            if (user != null)
            {
                onlineUsers.Add(user);

                // online notification to friends
                string[] allFriends    = DBoperations.GetFriends(user.Id);
                string[] online_users  = onlineUsers.Select(x => x.Login).ToArray();
                string[] onlineFriends = allFriends.Where(x => online_users.Contains(x)).ToArray();

                foreach (var login in onlineFriends)
                {
                    OnlineUser friend = GetOnlineUser(login);
                    friend?.Client.SendMessage(new UserActionMessage
                    {
                        UserLogin = user.Login,
                        Action    = UserActions.GoOnline
                    });
                }
            }

            // listen this user
            Task.Run(() => UserListener(user));
        }
Example #2
0
        /// <summary>
        /// Send array of friends to user.
        /// </summary>
        /// <param name="user">user.</param>
        /// <exception cref="ConnectionInterruptedException"></exception>
        private void SendFriends(OnlineUser user)
        {
            string[] allFriends   = DBoperations.GetFriends(user.Id);
            string[] online_users = onlineUsers.Select(x => x.Login).ToArray();

            user.Client.SendMessage(new FriendsMessage
            {
                OnlineFriends  = allFriends.Where(x => online_users.Contains(x)).ToArray(),
                OfflineFriends = allFriends.Where(x => !online_users.Contains(x)).ToArray()
            });
        }
Example #3
0
        /// <summary>
        /// Send array of all users to user.
        /// </summary>
        /// <param name="user">user.</param>
        /// <exception cref="ConnectionInterruptedException"></exception>
        private void SendAllUsers(OnlineUser user)
        {
            string[] allUsers        = DBoperations.GetAllUsers();
            string[] incomeRequests  = DBoperations.GetIncomeFriendshipRequests(user.Id);
            string[] outcomeRequests = DBoperations.GetOutcomeFriendshipRequests(user.Id);
            string[] friends         = DBoperations.GetFriends(user.Id);

            string[] users = allUsers.Where(x =>
                                            !incomeRequests.Contains(x) &
                                            !outcomeRequests.Contains(x) &
                                            !friends.Contains(x) &
                                            x != user.Login).ToArray();

            string[] online_users = onlineUsers.Select(x => x.Login).ToArray();

            user.Client.SendMessage(new AllUsersMessage
            {
                OnlineUsers  = users.Where(x => online_users.Contains(x)).ToArray(),
                OfflineUsers = users.Where(x => !online_users.Contains(x)).ToArray()
            });
        }
Example #4
0
        /// <summary>
        /// Log out user.
        /// </summary>
        /// <param name="user">user.</param>
        private void Logout(OnlineUser user)
        {
            log.Info($"Client disconnected. ip {((IPEndPoint)user.Client.tcpClient.Client.RemoteEndPoint).Address.ToString()}");

            string[] allFriends    = DBoperations.GetFriends(user.Id);
            string[] online_users  = onlineUsers.Select(x => x.Login).ToArray();
            string[] onlineFriends = allFriends.Where(x => online_users.Contains(x)).ToArray();

            foreach (var login in onlineFriends)
            {
                OnlineUser friend = GetOnlineUser(login);
                friend?.Client.SendMessage(new UserActionMessage
                {
                    UserLogin = user.Login,
                    Action    = UserActions.GoOffline
                });
            }

            onlineUsers.Remove(user);
            user.Dispose();
        }