public OperationResult <bool> ChangeNetworkStatus(NetworkStatus status) { Console.WriteLine("AccountUpdateServiceprovider ChangeNetworkStatus"); try { using (db = new DbMain.EFDbContext.ChatEntities()) { if (status == NetworkStatus.Off || status == NetworkStatus.Unknown) { return(new OperationResult <bool>(false, false, "Status error")); } var user = db.Users.FirstOrDefault(x => x.Id == curUser.Id); user.NetworkStatusId = (int)status; var friends = GetContacts(db, RelationStatus.Friendship); var res = db.SaveChanges(); if (res == 1) { lock (this) { curUser = user; } UserRelationsMain.UserNetworkStatusChange(friends, curUser.Login, status == NetworkStatus.Hidden ? NetworkStatus.Off : status); return(new OperationResult <bool>(true)); } return(new OperationResult <bool>(false, false, "DB Error")); } } catch (Exception ex) { return(new OperationResult <bool>(false, false, "Internal error. Try again later")); } }
public void Dispose() { using (DbMain.EFDbContext.ChatEntities db = new DbMain.EFDbContext.ChatEntities()) { db.Users.FirstOrDefault(x => x.Id == curUser.Id).NetworkStatusId = (int)NetworkStatus.Off; db.SaveChanges(); } var res = UserRelationsMain.OnlineUsers.TryRemove(curUser.Login, out AccountRelationsServiceProvider serviceprovider); UserRelationsMain.UserNetworkStatusChange(GetContacts(db, RelationStatus.Friendship), curUser.Login, NetworkStatus.Off); Console.WriteLine($"AccountUpdateServiceprovider Disposed id= {this.GetHashCode()}, login {curUser.Login}, result - {res}"); }
public OperationResult <UserExt> Authentication(string token) { Console.WriteLine("AccountUpdateServiceprovider Auth"); try { using (db = new DbMain.EFDbContext.ChatEntities()) { var access = db.AccessTokens.FirstOrDefault(x => x.IsActive && x.Token == token); if (access == null) { return(new OperationResult <UserExt>(null, false, "Faild authorization")); } curUser = access.User; if ((NetworkStatus)curUser.NetworkStatusId != NetworkStatus.Hidden) { access.User.NetworkStatusId = (int)NetworkStatus.OnLine; } db.SaveChanges(); UserRelationsMain.OnlineUsers.TryAdd(curUser.Login, this); UserRelationsMain.UserNetworkStatusChange(GetContacts(db, RelationStatus.Friendship), curUser.Login, NetworkStatus.OnLine); return(new OperationResult <UserExt>(new UserExt() { BirthDate = curUser.Birthdate, Icon = curUser.Icon, Login = curUser.Login, Name = curUser.Name, NetworkStatus = (NetworkStatus)curUser.NetworkStatusId, Phone = curUser.Phone })); } } catch (Exception ex) { return(new OperationResult <UserExt>(null, false, "Internal error. Try again later")); } }
public OperationResult <bool> ChangeRelationType(string login, RelationStatus status) { Console.WriteLine("AccountUpdateServiceprovider ChangeRelationType"); try { using (db = new DbMain.EFDbContext.ChatEntities()) { RelationStatus statusForPartner = status; if (login == curUser.Login) { return(new OperationResult <bool>(false, false, "Login error")); } var user = db.Users.FirstOrDefault(x => x.Login == login); if (user == null) { return(new OperationResult <bool>(false, false, "User not found")); } var contact = db.Contacts.FirstOrDefault(x => (x.AdderId == curUser.Id && x.InvitedId == user.Id) || (x.InvitedId == curUser.Id && x.AdderId == user.Id)); if (contact != null && contact.RelationTypeId == (int)status) { return(new OperationResult <bool>(false, false, "Status is the same")); } if (contact == null) { CreateContactAndDialog(db, out contact, user, status); } else { var convMember = user.ConversationMembers.FirstOrDefault(x => x.Conversation == contact.Conversation); switch (status) { case RelationStatus.None: convMember.MemberStatusId = (int)ConversationMemberStatus.None; contact.RelationTypeId = (int)status; break; case RelationStatus.Friendship: convMember.MemberStatusId = (int)ConversationMemberStatus.Admin; contact.RelationTypeId = (int)status; break; case RelationStatus.FrienshipRequestRecive: if (contact.AdderId == curUser.Id) { contact.RelationTypeId = (int)status; } else { contact.RelationTypeId = (int)RelationStatus.FriendshipRequestSent; } statusForPartner = RelationStatus.FriendshipRequestSent; break; case RelationStatus.BlockedByMe: if (contact.AdderId == curUser.Id && (RelationStatus)contact.RelationTypeId != RelationStatus.BlockedByPartner) { contact.RelationTypeId = (int)status; statusForPartner = RelationStatus.BlockedByPartner; } else if (contact.AdderId == curUser.Id && contact.RelationTypeId == (int)RelationStatus.BlockedByPartner || contact.InvitedId == curUser.Id && contact.RelationTypeId == (int)RelationStatus.BlockedByMe) { contact.RelationTypeId = (int)RelationStatus.BlockedBoth; statusForPartner = RelationStatus.BlockedBoth; } else if (contact.InvitedId == curUser.Id && (RelationStatus)contact.RelationTypeId != RelationStatus.BlockedByMe) { contact.RelationTypeId = (int)RelationStatus.BlockedByPartner; statusForPartner = RelationStatus.BlockedByPartner; } convMember.MemberStatusId = (int)ConversationMemberStatus.Blocked; break; } } var res = db.SaveChanges(); if (res < 1) { return(new OperationResult <bool>(false, false, "Faild")); } if (status == RelationStatus.Friendship) { UserRelationsMain.UserNetworkStatusChange(new List <string>() { curUser.Login }, user.Login, (NetworkStatus)user.NetworkStatusId); UserRelationsMain.UserNetworkStatusChange(new List <string>() { user.Login }, curUser.Login, (NetworkStatus)curUser.NetworkStatusId); } else { UserRelationsMain.UserNetworkStatusChange(new List <string>() { curUser.Login }, user.Login, NetworkStatus.Unknown); UserRelationsMain.UserNetworkStatusChange(new List <string>() { user.Login }, curUser.Login, NetworkStatus.Unknown); } UserRelationsMain.RelationTypeChanged(user.Login, curUser.Login, statusForPartner); return(new OperationResult <bool>(true)); } } catch (Exception ex) { return(new OperationResult <bool>(false, false, "Internal error. Try again later")); } }