void CloseAndRemove(ITorrentFileInfo file, ITorrentFileStream s) { logger.InfoFormatted("Closing and removing: {0}", file.Path); Streams.Remove(file); UsageOrder.Remove(file); s.Dispose(); }
void Add(ITorrentFileInfo file, ITorrentFileStream stream) { logger.InfoFormatted("Opening filestream: {0}", file.FullPath); if (MaxStreams != 0 && Streams.Count >= MaxStreams) { for (int i = 0; i < UsageOrder.Count; i++) { if (!Streams[UsageOrder[i]].Rented) { CloseAndRemove(UsageOrder[i], Streams[UsageOrder[i]]); break; } } } Streams.Add(file, stream); UsageOrder.Add(file); }
public RentedStream(ITorrentFileStream stream) { Stream = stream; stream?.Rent(); }
public RentedStream(ITorrentFileStream stream, ReusableExclusiveSemaphore.Releaser releaser) { Stream = stream; Releaser = releaser; }