Esempio n. 1
0
        public void AddFriendshipInvitation(FriendshipInvitation invitation, User friend)
        {
            long invitationId = invitation.FriendshipInvitationId.Value;

            if (oldInvitationIds.Contains(invitationId) || outgoingFriendInvitations.Any((IInternalOutgoingFriendInvitation i) => i.InvitationId == invitationId) || incomingFriendInvitations.Any((IInternalIncomingFriendInvitation i) => i.InvitationId == invitationId))
            {
                return;
            }
            if (invitation.IsInviter.Value)
            {
                IInternalOutgoingFriendInvitation internalOutgoingFriendInvitation = outgoingFriendInvitations.FirstOrDefault((IInternalOutgoingFriendInvitation i) => i.Invitee.DisplayName.Text == invitation.FriendDisplayName && i.RequestTrust != invitation.IsTrusted);
                if (internalOutgoingFriendInvitation != null)
                {
                    RemoveOutgoingFriendInvitation(internalOutgoingFriendInvitation.InvitationId);
                }
                IInternalUnidentifiedUser invitee = RemoteUserFactory.CreateUnidentifiedUser(friend.DisplayName, friend.FirstName, userDatabase);
                OutgoingFriendInvitation  outgoingFriendInvitation = new OutgoingFriendInvitation(this, invitee, invitation.IsTrusted.Value);
                outgoingFriendInvitation.SendComplete(invitationId);
                AddOutgoingFriendInvitation(outgoingFriendInvitation);
            }
            else
            {
                IInternalIncomingFriendInvitation internalIncomingFriendInvitation = incomingFriendInvitations.FirstOrDefault((IInternalIncomingFriendInvitation i) => i.Inviter.DisplayName.Text == invitation.FriendDisplayName && i.RequestTrust != invitation.IsTrusted);
                if (internalIncomingFriendInvitation != null)
                {
                    RemoveIncomingFriendInvitation(internalIncomingFriendInvitation.InvitationId);
                }
                IInternalUnidentifiedUser inviter = RemoteUserFactory.CreateUnidentifiedUser(friend.DisplayName, friend.FirstName, userDatabase);
                IncomingFriendInvitation  incomingFriendInvitation = new IncomingFriendInvitation(inviter, this, invitation.IsTrusted.Value);
                incomingFriendInvitation.SendComplete(invitationId);
                AddIncomingFriendInvitation(incomingFriendInvitation);
            }
        }
Esempio n. 2
0
        private ISendFriendInvitationResult GetInvitationValidationResult(string displayName, bool requestTrust)
        {
            IInternalFriend internalFriend = friends.FirstOrDefault((IInternalFriend f) => f.DisplayName.Text == displayName);

            if (internalFriend != null)
            {
                if (internalFriend.IsTrusted)
                {
                    logger.Critical("This user is already a trusted friend");
                    return(new SendFriendInvitationAlreadyFriendsResult(success: false, null));
                }
                if (!requestTrust)
                {
                    logger.Critical("This user is already an untrusted friend");
                    return(new SendFriendInvitationAlreadyFriendsResult(success: false, null));
                }
            }
            IInternalOutgoingFriendInvitation internalOutgoingFriendInvitation = outgoingFriendInvitations.FirstOrDefault((IInternalOutgoingFriendInvitation i) => i.Invitee.DisplayName.Text == displayName);

            if (internalOutgoingFriendInvitation != null)
            {
                if (internalOutgoingFriendInvitation.RequestTrust)
                {
                    logger.Critical("We already have a trusted invitation out for this user");
                    return(new SendFriendInvitationAlreadyExistsResult(success: false, null));
                }
                if (!requestTrust)
                {
                    logger.Critical("We already have an untrusted invitation out for this user");
                    return(new SendFriendInvitationAlreadyExistsResult(success: false, null));
                }
            }
            return(null);
        }
Esempio n. 3
0
        private void ReconcileFriendInvitations(GetStateResponse response, IInternalLocalUser localUser, IUserDatabase userDatabase)
        {
            List <FriendshipInvitation> friendshipInvitations = response.FriendshipInvitations;
            List <IInternalIncomingFriendInvitation> list     = localUser.InternalIncomingFriendInvitations.ToList();
            List <IInternalOutgoingFriendInvitation> list2    = localUser.InternalOutgoingFriendInvitations.ToList();

            if (friendshipInvitations != null)
            {
                foreach (FriendshipInvitation friendInvitation in friendshipInvitations)
                {
                    Func <IInternalIncomingFriendInvitation, bool> predicate           = (IInternalIncomingFriendInvitation i) => i.InvitationId == friendInvitation.FriendshipInvitationId;
                    IInternalIncomingFriendInvitation internalIncomingFriendInvitation = list.FirstOrDefault(predicate);
                    if (internalIncomingFriendInvitation != null)
                    {
                        if (internalIncomingFriendInvitation.RequestTrust != friendInvitation.IsTrusted)
                        {
                            internalIncomingFriendInvitation.RequestTrust = friendInvitation.IsTrusted.Value;
                        }
                        list.Remove(internalIncomingFriendInvitation);
                        continue;
                    }
                    IInternalOutgoingFriendInvitation internalOutgoingFriendInvitation = list2.FirstOrDefault((IInternalOutgoingFriendInvitation i) => i.InvitationId == friendInvitation.FriendshipInvitationId);
                    if (internalOutgoingFriendInvitation != null)
                    {
                        if (internalOutgoingFriendInvitation.RequestTrust != friendInvitation.IsTrusted)
                        {
                            internalOutgoingFriendInvitation.RequestTrust = friendInvitation.IsTrusted.Value;
                        }
                        list2.Remove(internalOutgoingFriendInvitation);
                        continue;
                    }
                    string firstName = response.Users.FirstOrDefault((User user) => user.DisplayName == friendInvitation.FriendDisplayName)?.FirstName;
                    if (friendInvitation.IsInviter.Value)
                    {
                        IInternalUnidentifiedUser invitee = RemoteUserFactory.CreateUnidentifiedUser(friendInvitation.FriendDisplayName, firstName, userDatabase);
                        OutgoingFriendInvitation  outgoingFriendInvitation = new OutgoingFriendInvitation(localUser, invitee, friendInvitation.IsTrusted.Value);
                        outgoingFriendInvitation.SendComplete(friendInvitation.FriendshipInvitationId.Value);
                        localUser.AddOutgoingFriendInvitation(outgoingFriendInvitation);
                    }
                    else
                    {
                        IInternalUnidentifiedUser inviter = RemoteUserFactory.CreateUnidentifiedUser(friendInvitation.FriendDisplayName, firstName, userDatabase);
                        IncomingFriendInvitation  incomingFriendInvitation = new IncomingFriendInvitation(inviter, localUser, friendInvitation.IsTrusted.Value);
                        incomingFriendInvitation.SendComplete(friendInvitation.FriendshipInvitationId.Value);
                        localUser.AddIncomingFriendInvitation(incomingFriendInvitation);
                    }
                }
            }
            foreach (IInternalIncomingFriendInvitation item in list)
            {
                localUser.RemoveIncomingFriendInvitation(item);
                item.Rejected();
            }
            foreach (IInternalOutgoingFriendInvitation item2 in list2)
            {
                localUser.RemoveOutgoingFriendInvitation(item2);
                item2.Rejected();
            }
        }
Esempio n. 4
0
        private void ReconcileFriends(GetStateResponse response, IInternalLocalUser localUser, IUserDatabase userDatabase)
        {
            List <IInternalFriend> list = localUser.InternalFriends.ToList();
            List <IInternalIncomingFriendInvitation> list2 = localUser.InternalIncomingFriendInvitations.ToList();
            List <IInternalOutgoingFriendInvitation> list3 = localUser.InternalOutgoingFriendInvitations.ToList();

            if (response.Friendships != null)
            {
                foreach (Friendship friendship in response.Friendships)
                {
                    string          friendUserId   = friendship.FriendUserId;
                    IInternalFriend internalFriend = list.FirstOrDefault((IInternalFriend f) => f.Swid == friendUserId);
                    User            user           = response.Users.First((User u) => u.UserId == friendUserId);
                    if (internalFriend != null)
                    {
                        if (internalFriend.IsTrusted != friendship.IsTrusted)
                        {
                            if (friendship.IsTrusted.Value)
                            {
                                internalFriend.ChangeTrust(isTrusted: true);
                            }
                            else
                            {
                                localUser.UntrustFriend(internalFriend);
                            }
                        }
                        list.Remove(internalFriend);
                        continue;
                    }
                    IInternalFriend internalFriend2 = RemoteUserFactory.CreateFriend(friendship.FriendUserId, friendship.IsTrusted.Value, user.DisplayName, user.FirstName, userDatabase);
                    IInternalIncomingFriendInvitation internalIncomingFriendInvitation = list2.FirstOrDefault((IInternalIncomingFriendInvitation i) => i.InternalInviter.DisplayName.Text == user.DisplayName);
                    if (internalIncomingFriendInvitation != null)
                    {
                        localUser.AddFriend(internalFriend2);
                        internalIncomingFriendInvitation.Accepted(internalFriend2.IsTrusted, internalFriend2);
                        list2.Remove(internalIncomingFriendInvitation);
                        localUser.RemoveIncomingFriendInvitation(internalIncomingFriendInvitation);
                        continue;
                    }
                    IInternalOutgoingFriendInvitation internalOutgoingFriendInvitation = list3.FirstOrDefault((IInternalOutgoingFriendInvitation i) => i.InternalInvitee.DisplayName.Text == user.DisplayName);
                    if (internalOutgoingFriendInvitation != null)
                    {
                        localUser.AddFriend(internalFriend2);
                        internalOutgoingFriendInvitation.Accepted(internalFriend2.IsTrusted, internalFriend2);
                        list3.Remove(internalOutgoingFriendInvitation);
                        localUser.RemoveOutgoingFriendInvitation(internalOutgoingFriendInvitation);
                    }
                    else
                    {
                        localUser.AddFriend(internalFriend2);
                    }
                }
            }
            foreach (IInternalFriend item in list)
            {
                localUser.RemoveFriend(item);
            }
        }
Esempio n. 5
0
        private IInternalOutgoingFriendInvitation RemoveOutgoingFriendInvitation(long invitationId)
        {
            oldInvitationIds.Add(invitationId);
            IInternalOutgoingFriendInvitation internalOutgoingFriendInvitation = outgoingFriendInvitations.FirstOrDefault((IInternalOutgoingFriendInvitation i) => i.InvitationId == invitationId);

            if (internalOutgoingFriendInvitation != null)
            {
                outgoingFriendInvitations.Remove(internalOutgoingFriendInvitation);
            }
            return(internalOutgoingFriendInvitation);
        }
Esempio n. 6
0
        public void AddOutgoingFriendInvitation(IInternalOutgoingFriendInvitation invitation)
        {
            IInternalOutgoingFriendInvitation internalOutgoingFriendInvitation = outgoingFriendInvitations.FirstOrDefault((IInternalOutgoingFriendInvitation i) => i.InternalInvitee.DisplayName.Text == invitation.InternalInvitee.DisplayName.Text);
            IOutgoingFriendInvitation         outgoingFriendInvitation         = null;

            if (internalOutgoingFriendInvitation == null)
            {
                outgoingFriendInvitations.Add(invitation);
                outgoingFriendInvitation = invitation;
            }
            else if (!internalOutgoingFriendInvitation.Sent && invitation.Sent)
            {
                internalOutgoingFriendInvitation.SendComplete(invitation.InvitationId);
                outgoingFriendInvitation = internalOutgoingFriendInvitation;
            }
            if (invitation.Sent && outgoingFriendInvitation != null)
            {
                ReceivedOutgoingFriendInvitationEventArgs e = new ReceivedOutgoingFriendInvitationEventArgs(outgoingFriendInvitation);
                this.OnReceivedOutgoingFriendInvitation(this, e);
            }
        }
Esempio n. 7
0
 public void RemoveOutgoingFriendInvitation(IInternalOutgoingFriendInvitation invitation)
 {
     oldInvitationIds.Add(invitation.InvitationId);
     outgoingFriendInvitations.Remove(invitation);
 }