コード例 #1
0
        private async Task SaveFileConfirmationProcess(ReceivedConfirmationDto dto, UserEntity userEntity)
        {
            var providers = GetScopeDbContext();

            var _dbContext = providers.DbContext;

            _logger.LogDebug($"Confirm arrived. {dto.Type} Arrived: {dto.ReceiveId} to user {dto.Token1}");
            _onlineUserRepository.AddFilePieceToUser(userEntity, dto.ReceiveId);

            var filePeace = await _dbContext
                            .VirtualFilePiece
                            .Include(x => x.File)
                            .FirstOrDefaultAsync(x => x.FilePieceId == dto.ReceiveId);

            filePeace.IsConfirmed = true;

            await _dbContext.SaveChangesAsync();

            var connectedFilePeEntities = _dbContext
                                          .VirtualFilePiece
                                          .Where(x => x.FileId == filePeace.FileId);

            if (!connectedFilePeEntities.Any(x => x.IsConfirmed == false))
            {
                filePeace.File.IsConfirmed = true;
                await _dbContext.SaveChangesAsync();

                _logger.LogInformation($"The file {filePeace.FileId} ONLINE");
            }

            providers.Scope.Dispose();
        }
コード例 #2
0
        private async Task ProcessDeleteConfirmed(ReceivedConfirmationDto dto)
        {
            var providers = GetScopeDbContext();

            var _dbContext = providers.DbContext;

            //törölni onlineuserrepo-ból
            //törölni db-ből

            var user = await _dbContext.User.FirstOrDefaultAsync(x => x.Token1 == dto.Token1) ??
                       throw new OperationFailedException(
                                 $"The user {dto.Token1} not found",
                                 HttpStatusCode.NotFound,
                                 null);

            user.AllocatedSpace -= dto.FilePeaceSize;
            await _dbContext.SaveChangesAsync();

            var filePeace = await _dbContext
                            .VirtualFilePiece
                            .Include(x => x.File)
                            .FirstOrDefaultAsync(x => x.FilePieceId == dto.ReceiveId);

            DeleteFilesRequiredEntity deleteItem;

            try
            {
                deleteItem =
                    await _dbContext.DeleteItems.FirstOrDefaultAsync(x =>
                                                                     x.FileId == filePeace.FileId && x.UserId == dto.Token1);
            }
            catch (Exception)
            {
                _onlineUserRepository.RemoveFilePeaceFromUser(dto.ReceiveId, dto.Token1);
                providers.Scope.Dispose();
                return;
            }

            _onlineUserRepository.RemoveFilePeaceFromUser(dto.ReceiveId, dto.Token1);

            if (deleteItem != null)
            {
                _dbContext.DeleteItems.Remove(deleteItem);

                await _dbContext.SaveChangesAsync();

                if (!(await _dbContext.DeleteItems.AnyAsync(x => x.FileId == filePeace.FileId)))
                {
                    _dbContext.VirtualFile.Remove(filePeace.File);
                }
            }

            await _dbContext.SaveChangesAsync();

            providers.Scope.Dispose();
        }
コード例 #3
0
        private async Task SendConfirm(Guid filePeaceId, IncomingRequestType webSocketRequestType, long fileSize = 0)
        {
            var dto = new ReceivedConfirmationDto
            {
                Token1        = UserService.Instance.GetCurrentUser().Token1,
                RequestType   = WebSocketRequestType.RECEIVED_COMFIRMATION,
                ReceiveId     = filePeaceId,
                Type          = webSocketRequestType,
                FilePeaceSize = fileSize
            };

            await WriteStringToWebSocket(JsonConvert.SerializeObject(dto), _clientWebSocket);
        }
コード例 #4
0
        private async Task ProcessReceivedConfirmation(ReceivedConfirmationDto dto, WebSocket webSocket)
        {
            var providers = GetScopeDbContext();

            var _dbContext = providers.DbContext;

            var userEntity =
                _dbContext
                .User
                .FirstOrDefault(x => x.Token1 == dto.Token1 && _webSocketRepository.IsUserAuthenticated(x)) ?? throw new UserNotFoundException(null, webSocket);

            _webSocketRepository.InsertOrUpdateUser(userEntity, webSocket);

            switch (dto.Type)
            {
            case ConfirmationType.SEND_FILE:
                _logger.LogDebug($"Confirm arrived. {dto.Type} Arrived: {dto.ReceiveId} to user {dto.Token1}");
                break;

            case ConfirmationType.DELETE_FILE:
                _logger.LogDebug($"Confirm arrived. {dto.Type} Arrived: {dto.ReceiveId} to user {dto.Token1}");
                await ProcessDeleteConfirmed(dto);

                break;

            case ConfirmationType.SAVE_FILE:
                await SaveFileConfirmationProcess(dto, userEntity);

                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            providers.Scope.Dispose();
        }