public LanguageKey AddBlacklist([FromBody] BlacklistRequest blacklistRequest)
        {
            var character       = _connectedAccountHttpClient.GetCharacter(blacklistRequest.CharacterId, null);
            var targetCharacter =
                _connectedAccountHttpClient.GetCharacter(blacklistRequest.BlInsPacket.CharacterId, null);

            if ((character.Item2 != null) && (targetCharacter.Item2 != null))
            {
                var relations = _characterRelationDao.Where(s => s.CharacterId == blacklistRequest.CharacterId)
                                .ToList();
                if (relations.Any(s =>
                                  (s.RelatedCharacterId == blacklistRequest.BlInsPacket.CharacterId) &&
                                  (s.RelationType != CharacterRelationType.Blocked)))
                {
                    return(LanguageKey.CANT_BLOCK_FRIEND);
                }

                if (relations.Any(s =>
                                  (s.RelatedCharacterId == blacklistRequest.BlInsPacket.CharacterId) &&
                                  (s.RelationType == CharacterRelationType.Blocked)))
                {
                    return(LanguageKey.ALREADY_BLACKLISTED);
                }

                var data = new CharacterRelationDto
                {
                    CharacterId        = character.Item2.ConnectedCharacter.Id,
                    RelatedCharacterId = targetCharacter.Item2.ConnectedCharacter.Id,
                    RelationType       = CharacterRelationType.Blocked
                };

                _characterRelationDao.InsertOrUpdate(ref data);
                return(LanguageKey.BLACKLIST_ADDED);
            }

            throw new ArgumentException();
        }
Beispiel #2
0
        public async Task <LanguageKey> AddFriendAsync(long characterId, long secondCharacterId, FinsPacketType friendsPacketType)
        {
            var character = await _connectedAccountHttpClient.GetCharacterAsync(characterId, null).ConfigureAwait(false);

            var targetCharacter = await _connectedAccountHttpClient.GetCharacterAsync(secondCharacterId, null).ConfigureAwait(false);

            var friendRequest = _friendRequestHolder.FriendRequestCharacters.Where(s =>
                                                                                   (s.Value.Item2 == character.Item2?.ConnectedCharacter?.Id) &&
                                                                                   (s.Value.Item1 == targetCharacter.Item2?.ConnectedCharacter?.Id)).ToList();

            if ((character.Item2 != null) && (targetCharacter.Item2 != null))
            {
                if (character.Item2.ChannelId != targetCharacter.Item2.ChannelId)
                {
                    throw new ArgumentException();
                }

                var relations = _characterRelationDao.Where(s => s.CharacterId == characterId)?.ToList() ?? new List <CharacterRelationDto>();
                if (relations.Count(s => s.RelationType == CharacterRelationType.Friend) >= 80)
                {
                    return(LanguageKey.FRIENDLIST_FULL);
                }

                if (relations.Any(s =>
                                  (s.RelationType == CharacterRelationType.Blocked) &&
                                  (s.RelatedCharacterId == secondCharacterId)))
                {
                    return(LanguageKey.BLACKLIST_BLOCKED);
                }

                if (relations.Any(s =>
                                  (s.RelationType == CharacterRelationType.Friend) &&
                                  (s.RelatedCharacterId == secondCharacterId)))
                {
                    return(LanguageKey.ALREADY_FRIEND);
                }

                if (character.Item2.ConnectedCharacter !.FriendRequestBlocked ||
                    targetCharacter.Item2.ConnectedCharacter !.FriendRequestBlocked)
                {
                    return(LanguageKey.FRIEND_REQUEST_BLOCKED);
                }

                if (!friendRequest.Any())
                {
                    _friendRequestHolder.FriendRequestCharacters[Guid.NewGuid()] =
                        new Tuple <long, long>(character.Item2.ConnectedCharacter.Id,
                                               targetCharacter.Item2.ConnectedCharacter.Id);
                    return(LanguageKey.FRIEND_REQUEST_SENT);
                }

                switch (friendsPacketType)
                {
                case FinsPacketType.Accepted:
                    var data = new CharacterRelationDto
                    {
                        CharacterId        = character.Item2.ConnectedCharacter.Id,
                        RelatedCharacterId = targetCharacter.Item2.ConnectedCharacter.Id,
                        RelationType       = CharacterRelationType.Friend
                    };

                    await _characterRelationDao.TryInsertOrUpdateAsync(data).ConfigureAwait(false);

                    var data2 = new CharacterRelationDto
                    {
                        CharacterId        = targetCharacter.Item2.ConnectedCharacter.Id,
                        RelatedCharacterId = character.Item2.ConnectedCharacter.Id,
                        RelationType       = CharacterRelationType.Friend
                    };

                    await _characterRelationDao.TryInsertOrUpdateAsync(data2).ConfigureAwait(false);

                    _friendRequestHolder.FriendRequestCharacters.TryRemove(friendRequest.First().Key, out _);
                    return(LanguageKey.FRIEND_ADDED);

                case FinsPacketType.Rejected:
                    _friendRequestHolder.FriendRequestCharacters.TryRemove(friendRequest.First().Key, out _);
                    return(LanguageKey.FRIEND_REJECTED);

                default:
                    _logger.Error(LogLanguage.Instance.GetMessageFromKey(LogLanguageKey.INVITETYPE_UNKNOWN));
                    _friendRequestHolder.FriendRequestCharacters.TryRemove(friendRequest.First().Key, out _);
                    throw new ArgumentException();
                }
            }

            _friendRequestHolder.FriendRequestCharacters.TryRemove(friendRequest.First().Key, out _);
            throw new ArgumentException();
        }
        public LanguageKey AddFriend([FromBody] FriendShipRequest friendPacket)
        {
            var character       = _connectedAccountHttpClient.GetCharacter(friendPacket.CharacterId, null);
            var targetCharacter = _connectedAccountHttpClient.GetCharacter(friendPacket.FinsPacket.CharacterId, null);
            var friendRequest   = _friendRequestHolder.FriendRequestCharacters.Where(s =>
                                                                                     (s.Value.Item2 == character.Item2.ConnectedCharacter.Id) &&
                                                                                     (s.Value.Item1 == targetCharacter.Item2.ConnectedCharacter.Id)).ToList();

            if ((character.Item2 != null) && (targetCharacter.Item2 != null))
            {
                if (character.Item2.ChannelId != targetCharacter.Item2.ChannelId)
                {
                    throw new ArgumentException();
                }

                var relations = _characterRelationDao.Where(s => s.CharacterId == friendPacket.CharacterId).ToList();
                if (relations.Count(s => s.RelationType == CharacterRelationType.Friend) >= 80)
                {
                    return(LanguageKey.FRIENDLIST_FULL);
                }

                if (relations.Any(s =>
                                  (s.RelationType == CharacterRelationType.Blocked) &&
                                  (s.RelatedCharacterId == friendPacket.FinsPacket.CharacterId)))
                {
                    return(LanguageKey.BLACKLIST_BLOCKED);
                }

                if (relations.Any(s =>
                                  (s.RelationType == CharacterRelationType.Friend) &&
                                  (s.RelatedCharacterId == friendPacket.FinsPacket.CharacterId)))
                {
                    return(LanguageKey.ALREADY_FRIEND);
                }

                if (character.Item2.ConnectedCharacter.FriendRequestBlocked ||
                    targetCharacter.Item2.ConnectedCharacter.FriendRequestBlocked)
                {
                    return(LanguageKey.FRIEND_REQUEST_BLOCKED);
                }

                if (!friendRequest.Any())
                {
                    _friendRequestHolder.FriendRequestCharacters[Guid.NewGuid()] =
                        new Tuple <long, long>(character.Item2.ConnectedCharacter.Id,
                                               targetCharacter.Item2.ConnectedCharacter.Id);
                    return(LanguageKey.FRIEND_REQUEST_SENT);
                }

                switch (friendPacket.FinsPacket.Type)
                {
                case FinsPacketType.Accepted:
                    var data = new CharacterRelationDto
                    {
                        CharacterId        = character.Item2.ConnectedCharacter.Id,
                        RelatedCharacterId = targetCharacter.Item2.ConnectedCharacter.Id,
                        RelationType       = CharacterRelationType.Friend
                    };

                    _characterRelationDao.InsertOrUpdate(ref data);
                    var data2 = new CharacterRelationDto
                    {
                        CharacterId        = targetCharacter.Item2.ConnectedCharacter.Id,
                        RelatedCharacterId = character.Item2.ConnectedCharacter.Id,
                        RelationType       = CharacterRelationType.Friend
                    };

                    _characterRelationDao.InsertOrUpdate(ref data2);
                    _friendRequestHolder.FriendRequestCharacters.TryRemove(friendRequest.First().Key, out _);
                    return(LanguageKey.FRIEND_ADDED);

                case FinsPacketType.Rejected:
                    _friendRequestHolder.FriendRequestCharacters.TryRemove(friendRequest.First().Key, out _);
                    return(LanguageKey.FRIEND_REJECTED);

                default:
                    _logger.Error(LogLanguage.Instance.GetMessageFromKey(LogLanguageKey.INVITETYPE_UNKNOWN));
                    _friendRequestHolder.FriendRequestCharacters.TryRemove(friendRequest.First().Key, out _);
                    throw new ArgumentException();
                }
            }

            _friendRequestHolder.FriendRequestCharacters.TryRemove(friendRequest.First().Key, out _);
            throw new ArgumentException();
        }