// Methods private static IAsyncResult _BeginGetDvdInfo(DvdInfoRequestData dvdInfoRequestData, string dvdId, AsyncCallback callback, object callbackData, bool bUseEnhancedMetadata) { if (dvdInfoRequestData == null) { //if (WorkOffline) //{ // return null; //} if (string.IsNullOrEmpty(dvdId)) { return null; } dvdInfoRequestData = new DvdInfoRequestData(dvdId); if (!bUseEnhancedMetadata) { s_currentRequests[dvdId] = dvdInfoRequestData; } //string strUrl = MetadataURLForDisc(dvdId, bUseEnhancedMetadata); string strUrl = MetadataURL(bUseEnhancedMetadata)+dvdId;//.Replace("|","");//string.Format(metMetadataURLForDisc(dvdId, bUseEnhancedMetadata); uint cbMaxSize = 0x19000; AsyncCallback callback2 = bUseEnhancedMetadata ? new AsyncCallback(DvdInfo.InetStreamCallbackEx) : new AsyncCallback(DvdInfo.InetStreamCallback); bool flag = false; try { InetStream.BeginRead(strUrl, callback2, dvdInfoRequestData, cbMaxSize); } catch (WebException exception) { flag = true; if (dvdInfoRequestData != null) { dvdInfoRequestData.Exception = exception; } } catch (InvalidOperationException exception2) { flag = true; if (dvdInfoRequestData != null) { dvdInfoRequestData.Exception = exception2; } } if (flag) { CompleteTheRequest(dvdInfoRequestData, true, true); } } DvdInfoCallback dvdInfoCallback = new DvdInfoCallback(callback, callbackData); if (dvdInfoRequestData.IsCompleted) { return IssueCallback(dvdInfoRequestData, dvdInfoCallback, true); } if (callback != null) { dvdInfoRequestData.Callbacks.Add(dvdInfoCallback); } return new DvdInfoAsyncResult(dvdInfoRequestData, dvdInfoCallback.CallbackData, false); }
private static void CompleteTheRequest(DvdInfoRequestData dvdInfoRequestData, bool fRemove, bool synchronous) { lock (s_lock) { dvdInfoRequestData.IsCompleted = true; dvdInfoRequestData.AsyncEvent.Set(); for (int i = 0; i < dvdInfoRequestData.Callbacks.Count; i++) { DvdInfoCallback dvdInfoCallback = (DvdInfoCallback)dvdInfoRequestData.Callbacks[i]; IssueCallback(dvdInfoRequestData, dvdInfoCallback, synchronous); } dvdInfoRequestData.Callbacks.Clear(); if (fRemove && (dvdInfoRequestData.DvdId != null)) { s_currentRequests.Remove(dvdInfoRequestData.DvdId); } } }
private static DvdInfoAsyncResult IssueCallback(DvdInfoRequestData dvdInfoRequestData, DvdInfoCallback dvdInfoCallback, bool completedSynchronously) { DvdInfoAsyncResult ar = new DvdInfoAsyncResult(dvdInfoRequestData, dvdInfoCallback.CallbackData, completedSynchronously); if (dvdInfoCallback.Callback != null) { if (completedSynchronously) { if (dvdInfoCallback != null) { dvdInfoCallback.Callback(ar); } return ar; } //TODO: rewire callback //Application.DeferredInvoke(dvdInfoCallback.Callback, new object[] { ar }); } return ar; }
public static IAsyncResult BeginGetDvdInfo(string dvdId, AsyncCallback callback, object callbackData) { lock (s_lock) { DvdInfoRequestData dvdInfoRequestData = (DvdInfoRequestData)s_currentRequests[dvdId]; if (dvdInfoRequestData == null) { DvdInfo dvdInfo = LoadFromCache(dvdId); if (IsValid(dvdInfo)) { dvdInfoRequestData = new DvdInfoRequestData(dvdId); s_currentRequests[dvdId] = dvdInfoRequestData; dvdInfoRequestData.DvdInfo = dvdInfo; dvdInfoRequestData.IsCompleted = true; } } return _BeginGetDvdInfo(dvdInfoRequestData, dvdId, callback, callbackData, false); } }