public async Task<bool> OpenConnection(Uri uri, TimeSpan? timeout = null) { if (uri == null) { throw new ArgumentNullException(); } if (state != ConnectionState.Closed) { return true; } state = ConnectionState.TryingConnection; #if WINDOWS_PHONE_APP||WINDOWS_APP||NETFX_CORE var filter = new HttpBaseProtocolFilter(); filter.CacheControl.ReadBehavior = HttpCacheReadBehavior.MostRecent; var httpClient = new HttpClient(filter); #else var httpClient = new HttpClient(new WebRequestHandler { CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore), }); #endif var to = (timeout == null) ? TimeSpan.FromMilliseconds(DEFAULT_REQUEST_TIMEOUT) : timeout; StartTimer((int)to.Value.TotalMilliseconds, httpClient); try { #if WINDOWS_PHONE_APP||WINDOWS_APP||NETFX_CORE var str = await httpClient.GetInputStreamAsync(uri); #else var str = await httpClient.GetStreamAsync(uri); #endif state = ConnectionState.Connected; var task = Task.Factory.StartNew(() => { #if WINDOWS_PHONE_APP||WINDOWS_APP||NETFX_CORE using (var core = new StreamAnalizer(str.AsStreamForRead())) #else using (var core = new StreamAnalizer(str)) #endif { core.RunFpsDetector(); core.JpegRetrieved = (packet) => { OnJpegRetrieved(new JpegEventArgs(packet)); }; core.PlaybackInfoRetrieved = (packet) => { OnPlaybackInfoRetrieved(new PlaybackInfoEventArgs(packet)); }; core.FocusFrameRetrieved = (packet) => { OnFocusFrameRetrieved(new FocusFrameEventArgs(packet)); }; while (state == ConnectionState.Connected) { try { core.ReadNextPayload(); } catch (Exception e) { Log("Caught " + e.GetType() + ": finish reading loop"); break; } } } Log("End of reading loop"); OnClosed(null); }); return true; } catch (Exception) { return false; } }
public async Task <bool> OpenConnection(Uri uri, TimeSpan?timeout = null) { if (uri == null) { throw new ArgumentNullException(); } if (state != ConnectionState.Closed) { return(true); } state = ConnectionState.TryingConnection; #if WINDOWS_PHONE_APP || WINDOWS_APP || NETFX_CORE var filter = new HttpBaseProtocolFilter(); filter.CacheControl.ReadBehavior = HttpCacheReadBehavior.MostRecent; var httpClient = new HttpClient(filter); #else var httpClient = new HttpClient(new WebRequestHandler { CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore), }); #endif var to = (timeout == null) ? TimeSpan.FromMilliseconds(DEFAULT_REQUEST_TIMEOUT) : timeout; StartTimer((int)to.Value.TotalMilliseconds, httpClient); try { #if WINDOWS_PHONE_APP || WINDOWS_APP || NETFX_CORE var str = await httpClient.GetInputStreamAsync(uri); #else var str = await httpClient.GetStreamAsync(uri); #endif state = ConnectionState.Connected; var task = Task.Factory.StartNew(() => { #if WINDOWS_PHONE_APP || WINDOWS_APP || NETFX_CORE using (var core = new StreamAnalizer(str.AsStreamForRead())) #else using (var core = new StreamAnalizer(str)) #endif { core.RunFpsDetector(); core.JpegRetrieved = (packet) => { OnJpegRetrieved(new JpegEventArgs(packet)); }; core.PlaybackInfoRetrieved = (packet) => { OnPlaybackInfoRetrieved(new PlaybackInfoEventArgs(packet)); }; core.FocusFrameRetrieved = (packet) => { OnFocusFrameRetrieved(new FocusFrameEventArgs(packet)); }; while (state == ConnectionState.Connected) { try { core.ReadNextPayload(); } catch (Exception e) { Log("Caught " + e.GetType() + ": finish reading loop"); break; } } } Log("End of reading loop"); OnClosed(null); }); return(true); } catch (Exception) { return(false); } }