Пример #1
0
        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"));
            }
        }
Пример #2
0
        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}");
        }
Пример #3
0
 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"));
     }
 }
Пример #4
0
        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"));
            }
        }
Пример #5
0
        public OperationResult <User> FriendshipRequest(string body, string userLogin)
        {
            try
            {
                using (db = new DbMain.EFDbContext.ChatEntities())
                {
                    var invited = db.Users.FirstOrDefault(x => x.Login == userLogin);
                    if (userLogin == curUser.Login || invited == null)
                    {
                        return(new OperationResult <User>(null, false, "Login error"));
                    }
                    var contact = db.Contacts.FirstOrDefault(x => (x.InvitedId == curUser.Id && x.AdderId == invited.Id) || (x.InvitedId == invited.Id && x.AdderId == curUser.Id));
                    if (contact != null)
                    {
                        RelationStatus status      = (RelationStatus)contact.RelationTypeId;
                        bool           IsInitiator = contact.AdderId == curUser.Id;
                        String         message     = String.Empty;
                        switch (status)
                        {
                        case RelationStatus.Friendship: message = "Friendship already confirmed"; break;

                        case RelationStatus.FriendshipRequestSent: message = IsInitiator ? "Friendship Request already Sent" : "Frienship Request already Recive"; break;

                        case RelationStatus.FrienshipRequestRecive: message = IsInitiator ? "Frienship Request already Recive" : "Friendship Request already Sent"; break;

                        case RelationStatus.BlockedByMe: message = IsInitiator ? "You blocked partner" : "You are Blocked By Partner"; break;

                        case RelationStatus.BlockedByPartner: message = IsInitiator ? "you are Blocked By Partner" : "You blocked partner"; break;

                        case RelationStatus.BlockedBoth: message = "Blocked Both"; break;

                        default:
                            break;
                        }
                        if (!String.IsNullOrEmpty(message))
                        {
                            return(new OperationResult <User>(null, false, message));
                        }
                    }
                    else
                    {
                        CreateContactAndDialog(db, out contact, invited, RelationStatus.FriendshipRequestSent);
                    }

                    if (contact.AdderId == curUser.Id)
                    {
                        contact.RelationTypeId = (int)RelationStatus.FriendshipRequestSent;
                    }
                    else
                    {
                        contact.RelationTypeId = (int)RelationStatus.FrienshipRequestRecive;
                    }
                    if (db.SaveChanges() > 0)
                    {
                        UserRelationsMain.SendFrienshipRequest(invited.Login, new User()
                        {
                            ConversationId = contact.ConversationId,
                            Icon           = curUser.Icon,
                            Login          = curUser.Login,
                            Name           = curUser.Name,
                            NetworkStatus  = NetworkStatus.Unknown,
                            RelationStatus = RelationStatus.FrienshipRequestRecive
                        }, "Hello");
                        return(new OperationResult <User>(new User
                        {
                            ConversationId = contact.Conversation.Id,
                            Login = userLogin,
                            Name = invited.Name,
                            RelationStatus = RelationStatus.FriendshipRequestSent,
                            Icon = invited.Icon,
                            NetworkStatus = NetworkStatus.Unknown
                        }));
                    }
                    return(new OperationResult <User>(null, false, "Internal error. Try again later"));
                }
            }
            catch (Exception ex)
            {
                return(new OperationResult <User>(null, false, "Internal error"));
            }
        }