// 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(); }
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(); }
// 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(); }
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); } }