/// <summary>
 /// Creates the virtual files for the metadata in a XML string form.
 /// </summary>
 /// <param name="basePath">The base path.</param>
 /// <param name="xmlString">The XML string.</param>
 public static void CreateVirtualFiles(ShadowMetaFullPath basePath, string xmlString)
 {
     var metaInfo = XmlUtil.FromXml<DataMetaInfo>(xmlString);
       var torrent = Torrent.Load(metaInfo.TorrentBytes);
       if (metaInfo.IsSingleFile) {
     var virtualFile = new VirtualFile() {
       PhysicalUri = metaInfo.DataUri,
       FileSize = torrent.Files[0].Length,
       OnDemand = metaInfo.OnDemand
     };
     var virtualFilePath = basePath.PathString;
     Logger.WriteLineIf(LogLevel.Verbose, _log_props, string.Format(
     "Creating virtual file at {0}", virtualFilePath));
     IOUtil.PrepareParentDirForPath(virtualFilePath);
     XmlUtil.WriteXml<VirtualFile>(virtualFile, virtualFilePath);
       } else {
     // Create a virtual file for each TorrentFile.
     foreach (TorrentFile file in torrent.Files) {
       var pathUri = new Uri(file.Path, UriKind.Relative);
       var virtualFile = new VirtualFile() {
     PhysicalUri = UriUtil.CombineUris(metaInfo.DataUri, pathUri),
     FileSize = file.Length,
     OnDemand = metaInfo.OnDemand
       };
       var virtualFilePath = UriUtil.CombinePaths(basePath.PathString, pathUri);
       Logger.WriteLineIf(LogLevel.Verbose, _log_props, string.Format(
     "Creating virtual file at {0}", virtualFilePath));
       IOUtil.PrepareParentDirForPath(virtualFilePath);
       XmlUtil.WriteXml<VirtualFile>(virtualFile, virtualFilePath);
     }
       }
 }
Example #2
0
 public OpenFileInfo(IntPtr fileHandle, VirtualPath virtualPath, 
     VirtualFile virtualFile, FileAccess fileAccess)
 {
     _fileHandle = fileHandle;
       _virtualPath = virtualPath;
       _virtualFile = virtualFile;
       _fileAccess = fileAccess;
 }
Example #3
0
        /// <summary>
        /// Creates a virtual file with the Physical location information in it.
        /// </summary>
        /// <param name="vp">The vp.</param>
        VirtualFile CreateAndWriteVirtualFile(VirtualPath vp)
        {
            ShadowFullPath readPath = _pathFactory.CreateShadowFullPath4Read(vp);
              ShadowFullPath writePath = _pathFactory.CreateShadwoFullPath4Write(vp);
              var virtualFile = new VirtualFile() {
            PhysicalUri = new Uri(writePath.PathString)
              };
              IOUtil.PrepareParentDirForPath(readPath.PathString);
              XmlUtil.WriteXml<VirtualFile>(virtualFile, readPath.PathString);

              Logger.WriteLineIf(LogLevel.Verbose, _log_props,
            string.Format("A virtual file is created at {0}", readPath.PathString));
              return virtualFile;
        }
Example #4
0
 /// <summary>
 /// Reads data given the specified virtual file.
 /// </summary>
 /// <param name="virtualFile">The virtual file.</param>
 /// <param name="buffer">The buffer.</param>
 /// <param name="offset">The offset.</param>
 /// <returns>The number of bytes read.</returns>
 public int Read(VirtualFile virtualFile, byte[] buffer, long offset)
 {
     var fileUri = virtualFile.PhysicalUri;
       if (fileUri.Scheme.Equals("file", StringComparison.OrdinalIgnoreCase)) {
     // Local disk
     var filePath = fileUri.LocalPath;
     Logger.WriteLineIf(LogLevel.Verbose, _log_props, string.Format(
       "Virtual file points to local path {0}. Reading it...", filePath));
     var actualRead = IOUtil.Read(filePath, buffer, offset, buffer.Length);
     return actualRead;
       } else {
     // Other types of services.
     throw new NotImplementedException();
       }
 }