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