Ejemplo n.º 1
0
 public FileSaveStatus Send(UserIdentity userIdentity, FileTransferObject obj)
 {
     if (_serverSidePresentationSchemaTransfer.Contains(userIdentity))
         return _serverSidePresentationSchemaTransfer.Send(userIdentity, obj);
     else if (_serverSidePresentationTransfer.Contains(userIdentity))
         return _serverSidePresentationTransfer.Send(userIdentity, obj);
     return FileSaveStatus.Abort;
 }
Ejemplo n.º 2
0
 public FileTransferObject? Receive(string resourceId)
 {
     try
     {
         if (_part == -1)
         {
             // первый вызов - определяем число частей
             //_numberOfParts = (int)(_resourceFileInfo.ResourceFileList.Find(rfp => rfp.Id.Equals(resourceId)).Length / (Constants.PartSize + 1)) + 1;
             _numberOfParts = _provider.GetNumberOfParts(resourceId);
             //_fileName = _resourceEx.GetResourceFileName(Resource, resourceId);
             _fileName = _provider.GetFileName(resourceId);
             _lastModifyDateTime = File.GetLastWriteTime(_fileName);
         }
         _part++;
         if (!File.GetLastWriteTime(_fileName).Equals(_lastModifyDateTime))
         {
             throw new Exception("Запрашиваемый Вами ресурс был изменен со времени последнего доступа");
         }
         if (_part >= _numberOfParts)
         {
             throw new Exception("Все части файла уже получены");
         }
         byte[] buffer = new byte[Constants.PartSize];
         int count;
         using (FileStream file = new FileStream(_fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
         {
             file.Seek(_part*Constants.PartSize, SeekOrigin.Begin);
             count = file.Read(buffer, 0, buffer.Length);
         }
         FileTransferObject obj = new FileTransferObject(count, _part, _numberOfParts, resourceId, buffer);
         if (_part + 1 == _numberOfParts)
             _part = -1;
         return obj;
     }
     catch
     {
         Abort(this, EventArgs.Empty);
         throw;
     }
 }
Ejemplo n.º 3
0
 public FileSaveStatus Send(UserIdentity userIdentity, FileTransferObject obj)
 {
     throw new System.NotImplementedException();
 }
Ejemplo n.º 4
0
 public FileSaveStatus Send(UserIdentity userIdentity, FileTransferObject obj)
 {
     return _serverSideSourceTransfer.Send(userIdentity, obj);
 }
Ejemplo n.º 5
0
 public bool Save(FileTransferObject obj)
 {
     lock (this)
     {
         if (_wasTerminated == 1) return false;
         int currentPart = obj.Part;
         if (currentPart - _part != 1)
         {
             if (PartSend == 0) // С докачкой возможно такое, не страшно
             {
                 //Error();
                 throw new Exception(
                     string.Format(
                         "FileSaver.Save: неверная последовательность частей файла! Должна придти {0} часть, а пришла {1} часть",
                         _part + 1, currentPart));
             }
             else return false;
         }
         _part = currentPart;
         if (_part == 0)
         {
             bool needExit = false;
             _file =  Path.GetFileName(_fileInfoProvider.GetFileName(obj.FileId));
             // пришла самая первая часть
             _currentFileName = _useTempFile
                                    ?
                                        _fileInfoProvider.GetFileName(obj.FileId) + _tempExt
                                    :
                                        _fileInfoProvider.GetFileName(obj.FileId);
             if (_useUploadResume && obj.NumberOfParts>2)
             {
                 //Если нужна докачка и файл длинный
                 if(File.Exists(_currentFileName)) 
                 {
                     //Такой файл уже есть, надо докачивать.
                     FileInfo info=new FileInfo(_currentFileName);
                     long fileSize = info.Length;
                     int partSize = obj.CountToWrite;
                     if(fileSize%partSize == 0)
                     {
                         // Размер файла соответствует размеру блока (тупая проверка)
                         _partSend = Convert.ToInt32(fileSize/partSize);
                         _part = _partSend-1;
                         needExit = true;
                         //return false;
                     }
                     else
                     {
                         File.Delete(_currentFileName);
                     }
                 }
             }
             else
             {
                 File.Delete(_currentFileName);
             }
             _currentFileId = obj.FileId;
             _fileDic[_currentFileId] = _currentFileName;
             if (needExit) return false;
         }
         WriteContentToFile(obj.FileContent, obj.CountToWrite);
         if (_part + 1 == obj.NumberOfParts)
         {
             _part = -1;
             return true;
         }
         return false;
     }
 }
Ejemplo n.º 6
0
 public FileSaveStatus Send(UserIdentity userIdentity, FileTransferObject obj)
 {
     return _resourceManager.Send(userIdentity, obj);
 }
Ejemplo n.º 7
0
 public FileSaveStatus Send(UserIdentity userIdentity, FileTransferObject obj)
 {
     if (_presentationWorker.IsUserParticipateInResourceTransfer(userIdentity))
         return _presentationWorker.Send(userIdentity, obj);
     if (_configFileExportHelper.IsUserParticipateInResourceTransfer(userIdentity))
         return _configFileExportHelper.Send(userIdentity, obj);
     return FileSaveStatus.Abort;
 }
Ejemplo n.º 8
0
 public FileSaveStatus Send(UserIdentity userIdentity, FileTransferObject obj)
 {
     try
     {
         if (_serverSideSourceTransfer.Contains(userIdentity))
             return _serverSideSourceTransfer.Send(userIdentity, obj);
         else if (_serverSidePresentationTransfer.Contains(userIdentity))
             return _serverSidePresentationTransfer.Send(userIdentity, obj);
         else
             return FileSaveStatus.Abort;
     }
     catch (Exception ex)
     {
         _configuration.EventLog.WriteError(string.Format("PresentationWorker.Send: userIdentity:{0}, Resource:{1}, \n{2}",
             userIdentity, obj.FileId, ex));
         return FileSaveStatus.Abort;
     }
 }