/// <see cref="WorkQueue.IResponseHandler.HandleResponse"/> ////[OgreVersion(1, 7, 2)] public void HandleResponse(WorkQueue.Response res, WorkQueue srcq) { if (res.Request.Aborted) { this.outstandingRequestSet.Remove(res.Request.ID); return; } if (res.Succeeded) { var resresp = (ResourceResponse)res.Data; // Complete full loading in main thread if semithreading ResourceRequest req = resresp.Request; #if AXIOM_THREAD_SUPPORT if (Configuration.Config.AxiomThreadLevel == 2) { // These load commands would have been downgraded to prepare() for the background if (req.Type == RequestType.LoadResource) { ResourceManager rm = ResourceGroupManager.Instance.ResourceManagers[req.ResourceType]; rm.Load(req.ResourceName, req.GroupName, req.IsManual, req.Loader, req.LoadParams, true); } else if (req.Type == RequestType.LoadGroup) { ResourceGroupManager.Instance.LoadResourceGroup(req.GroupName); } } #endif this.outstandingRequestSet.Remove(res.Request.ID); // Call resource listener if (resresp.Resource != null) { if (req.Type == RequestType.LoadResource) { resresp.Resource.FireLoadingComplete(true); } else { resresp.Resource.FirePreparingComplete(true); } } // Call queue listener if (req.Listener != null) { req.Listener.Invoke(res.Request.ID, req.Result); } } }
/// <see cref="WorkQueue.IRequestHandler.HandleRequest"/> public WorkQueue.Response HandleRequest( WorkQueue.Request req, WorkQueue srcQ ) { // Background thread (maybe) var preq = (PageRequest)req.Data; // only deal with own requests; we shouldn't ever get here though if ( preq.srcPage != this ) { return null; } var res = new PageResponse(); res.pageData = new PageData(); WorkQueue.Response response; try { PrepareImpl( ref res.pageData ); response = new WorkQueue.Response( req, true, res ); } catch ( Exception e ) { // oops response = new WorkQueue.Response( req, false, res, e.Message ); } return response; }
/// <see cref="WorkQueue.IResponseHandler.CanHandleResponse"/> ////[OgreVersion(1, 7, 2)] public bool CanHandleResponse(WorkQueue.Response res, WorkQueue srcq) { return(true); }
public WorkQueue.Response HandleRequest( WorkQueue.Request req, WorkQueue srcQ ) { var lreq = (LoadRequest)req.Data; var def = lreq.Slot.Def; var t = lreq.Slot.Instance; System.Diagnostics.Debug.Assert( t != null, "Terrain instance should have been constructed in the main thread" ); WorkQueue.Response response; try { if ( !string.IsNullOrEmpty( def.FileName ) ) { t.Prepare( def.FileName ); } else { System.Diagnostics.Debug.Assert( def.ImportData != null, "No import data or file name" ); t.Prepare( def.ImportData ); // if this worked, we can destroy the input data to save space def.FreeImportData(); } response = new WorkQueue.Response( req, true, new object() ); } catch ( Exception e ) { // oops response = new WorkQueue.Response( req, false, new object(), e.Message ); } return response; }