/// <summary> /// Create a PortAudioDevicePump for an input device /// Note: This MUST be disposed, or you risk breaking audio on the host until the next reboot /// </summary> /// <param name="device">The input device to create a pump for</param> /// <param name="channelCount">The number of channels to capture from the input device</param> /// <param name="sampleFormat">The sample format of the output PCM data</param> /// <param name="suggestedLatency">The latency the device will attempt to achieve</param> /// <param name="sampleRate">The sample rate of the output PCM data</param> /// <param name="callback">The callback that will be invoked when data is produced</param> /// <exception cref="ArgumentNullException">Thrown in the case that the device or callback are null</exception> public unsafe PortAudioDevicePump(PortAudioDevice device, int channelCount, PortAudioSampleFormat sampleFormat, TimeSpan suggestedLatency, double sampleRate, WriteDataCallback callback) { if (device == null) { throw new ArgumentNullException(nameof(device)); } if (callback == null) { throw new ArgumentNullException(nameof(callback)); } PortAudioLifetimeRegistry.Register(this); SampleFormat = sampleFormat; Channels = channelCount; SampleRate = sampleRate; SuggestedLatency = suggestedLatency; _handle = GCHandle.Alloc(this); _isOutput = false; _writeDataCallback = callback; var inputParams = new PaStreamParameters { ChannelCount = channelCount, DeviceIndex = device.DeviceIndex, HostApiSpecificStreamInfo = IntPtr.Zero, SampleFormats = sampleFormat.SampleFormat, SuggestedLatency = new PaTime(suggestedLatency) }; var err = Native.PortAudio.Pa_OpenStream(out _stream, &inputParams, null, sampleRate, FRAMES_TO_BUFFER, PaStreamFlags.NoFlag, StreamCallback, GCHandle.ToIntPtr(_handle)); if (err < PaErrorCode.NoError) { throw PortAudioException.GetException(err); } err = Native.PortAudio.Pa_SetStreamFinishedCallback(_stream, StreamFinishedCallback); if (err < PaErrorCode.NoError) { throw PortAudioException.GetException(err); } }
private void Send( string uri, ReceiveMode mode, WriteDataCallback wdcb, SuccessCallback scb, BinarySuccessCallback bcb, ErrorCallback ecb, FinishedCallback fcb) { if (!LoggedIn && uri != "/login" && uri != "/crashreport") { throw new InvalidOperationException("Not logged in"); } var req = WebRequest.CreateHttp(((uri == "/login" || uri == "/crashreport") ? DefaultRootUrl : RootUrl) + uri); req.ContentType = "application/x-www-form-urlencoded"; req.Method = "POST"; var waitHandle = new ManualResetEvent(false); req.BeginGetRequestStream(ar => { try { using (var requestStream = req.EndGetRequestStream(ar)) { using (var sr = new StreamWriter(requestStream)) { wdcb(sr); } } req.BeginGetResponse( a => { waitHandle.Set(); try { var response = (HttpWebResponse) req.EndGetResponse(a); var responseStream = response.GetResponseStream(); if (mode == ReceiveMode.Blob) { var data = new byte[response.ContentLength]; responseStream.BeginRead( data, 0, (int) response.ContentLength, result => { if (result.IsCompleted) { bcb(response.ContentType, data); } else { ecb("Incomplete response"); } }, null ); } else { using (var sr = new StreamReader(responseStream)) { switch (mode) { case ReceiveMode.Lines: string line; while ((line = sr.ReadLine()) != null) { if (line != string.Empty) { scb(line); } } break; case ReceiveMode.SingleString: scb(sr.ReadToEnd()); break; } if (fcb != null) { fcb(); } } } } catch (WebException e) { if(e.Status == WebExceptionStatus.RequestCanceled) { ecb(""); return; } var response = (HttpWebResponse) e.Response; if (response.StatusCode == HttpStatusCode.Forbidden) { LoggedIn = false; } try { using (var responseStream = response.GetResponseStream()) { using (var sr = new StreamReader(responseStream)) { ecb(sr.ReadToEnd()); } } } catch (Exception ex) { // What is wrong with this platform?! ecb(ex.Message + "\n" + e.Message); } } }, null ); } catch(WebException) { // The request was aborted ecb(""); } }, null); ThreadPool.QueueUserWorkItem( state => { if (!waitHandle.WaitOne(MessageTimeout)) { (state as HttpWebRequest).Abort(); } }, req ); }
private void RequestData(string url, RequestType type, WriteDataCallback write, SuccessfulCallback success, ErrorCallback error) { try { //Prevent caching by adding the datetime. WP y u so dum... var request = WebRequest.CreateHttp(BaseUrl + url + "&nocache=" + DateTime.Now.Ticks.ToString()); if (type == RequestType.POST) { request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; } else { request.Method = "GET"; } request.CookieContainer = _cookies; request.UserAgent = request.UserAgent; if (type == RequestType.POST) { request.BeginGetRequestStream(cb => { using (var sr = new StreamWriter(request.EndGetRequestStream(cb))) { write(sr); } request.BeginGetResponse( a => { try { var response = (HttpWebResponse)request.EndGetResponse(a); var responseStream = response.GetResponseStream(); using (var sr = new StreamReader(responseStream)) { success(sr.ReadToEnd()); } } catch (WebException ex) { error("Web exception", ex); } }, null); }, null); } else { request.BeginGetResponse( a => { try { var response = (HttpWebResponse)request.EndGetResponse(a); var responseStream = response.GetResponseStream(); using (var sr = new StreamReader(responseStream)) { string result = sr.ReadToEnd(); success(result); } } catch (WebException ex) { error("GET exception", ex); } }, null); } } catch (WebException ex) { error("Web exception", ex); } }
private void Send( string uri, ReceiveMode mode, WriteDataCallback wdcb, SuccessCallback scb, BinarySuccessCallback bcb, ErrorCallback ecb, FinishedCallback fcb) { if (!LoggedIn && uri != "/login" && uri != "/crashreport") { throw new InvalidOperationException("Not logged in"); } var req = WebRequest.CreateHttp(((uri == "/login" || uri == "/crashreport") ? DefaultRootUrl : RootUrl) + uri); req.ContentType = "application/x-www-form-urlencoded"; req.Method = "POST"; var waitHandle = new ManualResetEvent(false); req.BeginGetRequestStream(ar => { try { using (var requestStream = req.EndGetRequestStream(ar)) { using (var sr = new StreamWriter(requestStream)) { wdcb(sr); } } req.BeginGetResponse( a => { waitHandle.Set(); try { var response = (HttpWebResponse)req.EndGetResponse(a); var responseStream = response.GetResponseStream(); if (mode == ReceiveMode.Blob) { var data = new byte[response.ContentLength]; responseStream.BeginRead( data, 0, (int)response.ContentLength, result => { if (result.IsCompleted) { bcb(response.ContentType, data); } else { ecb("Incomplete response"); } }, null ); } else { using (var sr = new StreamReader(responseStream)) { switch (mode) { case ReceiveMode.Lines: string line; while ((line = sr.ReadLine()) != null) { if (line != string.Empty) { scb(line); } } break; case ReceiveMode.SingleString: scb(sr.ReadToEnd()); break; } if (fcb != null) { fcb(); } } } } catch (WebException e) { if (e.Status == WebExceptionStatus.RequestCanceled) { ecb(""); return; } var response = (HttpWebResponse)e.Response; if (response.StatusCode == HttpStatusCode.Forbidden) { LoggedIn = false; } try { using (var responseStream = response.GetResponseStream()) { using (var sr = new StreamReader(responseStream)) { ecb(sr.ReadToEnd()); } } } catch (Exception ex) { // What is wrong with this platform?! ecb(ex.Message + "\n" + e.Message); } } }, null ); } catch (WebException) { // The request was aborted ecb(""); } }, null); ThreadPool.QueueUserWorkItem( state => { if (!waitHandle.WaitOne(MessageTimeout)) { (state as HttpWebRequest).Abort(); } }, req ); }