Esempio n. 1
0
            // Execute when user Log out.
            private void DeleteUserFiles(User user)
            {
                foreach (FileDetails file in user.FileList)
                {
                    if (ServerFileList.ContainsKey(file))
                    {
                        // File exsits in list.
                        if (ServerFileList[file].Contains(user))
                        {
                            // This user in owner of this file.
                            ServerFileList[file].Remove(user);

                            // Delete this file if there is no longer more owners.
                            if (ServerFileList[file].Count == 0)
                            {
                                ServerFileList.Remove(file);
                            }
                        }
                    }
                }

                // Delete user from list if is active.
                if (ActiveUsers.Contains(user))
                {
                    ActiveUsers.Remove(user);
                }

                while (bwUpdateUserList.IsBusy)
                {
                    ;
                }
                bwUpdateUserList.RunWorkerAsync();
            }
Esempio n. 2
0
        public static void OnDisconnect(Socket socket)
        {
            IPAddress disconnectedAddress = (socket.LocalEndPoint as IPEndPoint).Address;

            Zephy.Logger.Information($"{disconnectedAddress} has disconnected, closing & disposing socket.");

            if (ActiveUsers.IsLoggedIn(socket))
            {
                ActiveUser user = ActiveUsers.GetUser(socket);
                ActiveUsers.RemoveUser(socket);
                Zephy.Logger.Information($"User at {disconnectedAddress} was logged in as {user.userId}, logging out.");
            }
            socket.Close();
        }
Esempio n. 3
0
            // Execute when user Log in.
            private void AddUserFiles(User user, OperationsDB DB)
            {
                lock (thisLock)
                {
                    if (!ActiveUsers.Contains(user))
                    {
                        ActiveUsers.Add(user);
                    }
                }

                foreach (FileDetails file in user.FileList)
                {
                    if (ServerFileList.ContainsKey(file))
                    {
                        // This file already exist in list.
                        // Add this user as adition peer to download.
                        lock (thisLock)
                        {
                            if (!ServerFileList[file].Contains(user))
                            {
                                ServerFileList[file].Add(user);
                                DB.AddPeerToFile(file.FileName, file.FileSize);
                            }
                        }
                    }

                    else
                    {
                        // This file new in list.
                        lock (thisLock)
                        {
                            ServerFileList.Add(file, new List <User>());
                            ServerFileList[file].Add(user);
                            DB.AddFile(file.FileName, file.FileSize);
                        }
                    }
                }

                while (bwUpdateUserList.IsBusy)
                {
                    ;
                }
                bwUpdateUserList.RunWorkerAsync();
            }
Esempio n. 4
0
            private async void AddNewUser(NetworkStream stream, User newUser)
            {
                try
                {
                    byte[] answer = new byte[1];
                    int    status = 0;
                    // 0 = User not exist.
                    // 1 = Connecting the user.
                    // 2 = User alredy connected.
                    // 3 = User Disable.

                    if (newUser != null)
                    {
                        status    = DB.GetUserStatus(newUser.UserName, newUser.Password);
                        answer[0] = (byte)status;

                        if (status == 1)
                        {
                            if (!ActiveUsers.Contains(newUser))
                            {
                                // Add user files to server.
                                AddUserFiles(newUser, DB);

                                await stream.WriteAsync(answer, 0, 1);

                                FileRequestHandler();
                            }
                        }

                        else
                        {
                            await stream.WriteAsync(answer, 0, 1);
                        }
                    }
                }

                catch (Exception e)
                {
                    MessageBoxResult result = MessageBox.Show("A problem occurred while adding a new user\n" + e);
                }
            }