public ProducerConsumerMemoryStream(ICacheStream cacheStream) { if (cacheStream == null) throw new ArgumentNullException("cacheStream"); __InnerStream = new MemoryStream(); __CacheStream = cacheStream; __Lock = new object(); }
public ProducerConsumerMemoryStream(ICacheStream cacheStream) { if (cacheStream == null) { throw new ArgumentNullException("cacheStream"); } __InnerStream = new MemoryStream(); __CacheStream = cacheStream; __Lock = new object(); }
public void Init() { __CacheStream = __Storage.GetCacheStream(__Audio); switch (__CacheStream.Status) { case AudioStorageStatus.Stored: __ProducerConsumerStream = new ProducerConsumerMemoryStream(__CacheStream); __ProducerConsumerStream.LoadToMemory(); __ProducerConsumerStream.WriteFinished = true; DownloadedFracion = 1.0; break; case AudioStorageStatus.PartiallyStored: case AudioStorageStatus.NotStored: if (__Downloader == null || __Url == null) { throw new PuckevichException("__Url or __Downloader cannot be null for not cached audio!"); } __WebDownloaderTask = Task.Run((Action)WebDownloader); break; default: throw new ArgumentOutOfRangeException(); } __TasksInitialized = true; while (__CacheStream.Status != AudioStorageStatus.Stored && !__ThresholdDownloaded) { Thread.Sleep(1); } if (__RequestTasksStop) { return; } __BassStream = Bass.BASS_StreamCreateFileUser(BASSStreamSystem.STREAMFILE_BUFFER, BASSFlag.BASS_DEFAULT, __BassFileProcs, IntPtr.Zero); WhenInit(); }
public void FlushToCache() { lock (__Lock) { if (__WritePosition > __CacheStream.Position) { var toWrite = __WritePosition - __CacheStream.Position; var buf = new byte[16384]; __InnerStream.Position = __CacheStream.Position; int allRead = 0; while (allRead < toWrite) { int read; allRead += (read = __InnerStream.Read(buf, 0, buf.Length)); __CacheStream.Write(buf, 0, read); } __CacheStream.Flush(); __CacheStream.Dispose(); __CacheStream = null; } } }
public void Init() { __CacheStream = __Storage.GetCacheStream(__Audio); switch (__CacheStream.Status) { case AudioStorageStatus.Stored: __ProducerConsumerStream = new ProducerConsumerMemoryStream(__CacheStream); __ProducerConsumerStream.LoadToMemory(); __ProducerConsumerStream.WriteFinished = true; DownloadedFracion = 1.0; break; case AudioStorageStatus.PartiallyStored: case AudioStorageStatus.NotStored: if (__Downloader == null || __Url == null) throw new PuckevichException("__Url or __Downloader cannot be null for not cached audio!"); __WebDownloaderTask = Task.Run((Action)WebDownloader); break; default: throw new ArgumentOutOfRangeException(); } __TasksInitialized = true; while (__CacheStream.Status != AudioStorageStatus.Stored && !__ThresholdDownloaded) Thread.Sleep(1); if (__RequestTasksStop) return; __BassStream = Bass.BASS_StreamCreateFileUser(BASSStreamSystem.STREAMFILE_BUFFER, BASSFlag.BASS_DEFAULT, __BassFileProcs, IntPtr.Zero); WhenInit(); }