public SocketWrapper(StreamSocket baseSocket, DataReader dataReader, DataWriter dataWriter) { if (baseSocket == null) { throw new ArgumentNullException(nameof(baseSocket)); } if (dataReader == null) { SocketDataReader = new DataReader(BaseSocket.InputStream); } if (dataWriter == null) { SocketDataWriter = new DataWriter(BaseSocket.OutputStream); } BaseSocket = baseSocket; SocketDataReader = dataReader; SocketDataWriter = dataWriter; InitializeDataStream(); InitialBufferLock.Release(1); }
public virtual async Task ReadBytesAsync(byte[] buffer) { await WaitForInitialBufferReadyAsync(); LastReadTime = DateTime.Now; SocketDataReader.ReadBytes(buffer); InitialBufferLock.Release(); }
public virtual async Task <uint> LoadAsync(uint amount) { await WaitForInitialBufferReadyAsync(); var result = await SocketDataReader.LoadAsync(amount); InitialBufferLock.Release(); return(result); }
public virtual async Task <byte> ReadByteAsync() { await WaitForInitialBufferReadyAsync(); LastReadTime = DateTime.Now; var result = SocketDataReader.ReadByte(); InitialBufferLock.Release(); return(result); }
public virtual async Task <IBuffer> ReadBufferAsync(uint length) { await WaitForInitialBufferReadyAsync(); LastReadTime = DateTime.Now; var result = SocketDataReader.ReadBuffer(length); InitialBufferLock.Release(); return(result); }
public virtual async Task <string> ReadStringAsync(uint codeUnitCount) { await WaitForInitialBufferReadyAsync(); LastReadTime = DateTime.Now; var result = SocketDataReader.ReadString(codeUnitCount); InitialBufferLock.Release(); return(result); }
protected void HandleInitialBuffering(uint size) { //this function pauses the streaming process initially so that we can buffer, avoiding that initial stutter in playback. if (isInitialBuffering) { initialBufferedAmount += size; //todo create events that get bubbled up to the client so that they can show a "buffering" ui. if (initialBufferedAmount > Math.Max(UWPShoutcastMSS.Parsers.Audio.MP3Parser.mp3_sampleSize, UWPShoutcastMSS.Parsers.Audio.AAC_ADTSParser.aac_adts_sampleSize) * 10) { InitialBufferLock.Release(1); isInitialBuffering = false; } } }
public Task WaitForInitialBufferReadyAsync() { return(InitialBufferLock.WaitAsync()); }