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();
        }
Example #3
0
        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 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;
                }
            }
        }
Example #6
0
        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();
        }