/// <see cref="WorkQueue.IRequestHandler.HandleRequest"/> //[OgreVersion(1, 7, 2)] public WorkQueue.Response HandleRequest(WorkQueue.Request req, WorkQueue srcQ) { var resreq = (ResourceRequest)req.Data; if (req.Aborted) { if (resreq.Type == RequestType.PrepareResource || resreq.Type == RequestType.LoadResource) { resreq.LoadParams.Clear(); resreq.LoadParams = null; } resreq.Result.Error = false; var resresp = new ResourceResponse(null, resreq); return(new WorkQueue.Response(req, true, resresp)); } ResourceManager rm = null; Resource resource = null; try { switch (resreq.Type) { case RequestType.InitializeGroup: ResourceGroupManager.Instance.InitializeResourceGroup(resreq.GroupName); break; case RequestType.InitializeAllGroups: ResourceGroupManager.Instance.InitializeAllResourceGroups(); break; case RequestType.PrepareGroup: ResourceGroupManager.Instance.PrepareResourceGroup(resreq.GroupName); break; case RequestType.LoadGroup: #if AXIOM_THREAD_SUPPORT if (Axiom.Configuration.Config.AxiomThreadLevel == 2) { ResourceGroupManager.Instance.PrepareResourceGroup(resreq.GroupName); } else { ResourceGroupManager.Instance.LoadResourceGroup(resreq.GroupName); } #endif break; case RequestType.UnloadGroup: ResourceGroupManager.Instance.UnloadResourceGroup(resreq.GroupName); break; case RequestType.PrepareResource: rm = ResourceGroupManager.Instance.ResourceManagers[resreq.ResourceType]; resource = rm.Prepare(resreq.ResourceName, resreq.GroupName, resreq.IsManual, resreq.Loader, resreq.LoadParams, true); break; case RequestType.LoadResource: #if AXIOM_THREAD_SUPPORT rm = ResourceGroupManager.Instance.ResourceManagers[resreq.ResourceType]; if (Axiom.Configuration.Config.AxiomThreadLevel == 2) { resource = rm.Prepare(resreq.ResourceName, resreq.GroupName, resreq.IsManual, resreq.Loader, resreq.LoadParams, true); } else { resource = rm.Load(resreq.ResourceName, resreq.GroupName, resreq.IsManual, resreq.Loader, resreq.LoadParams, true); } #endif break; case RequestType.UnloadResource: rm = ResourceGroupManager.Instance.ResourceManagers[resreq.ResourceType]; if (string.IsNullOrEmpty(resreq.ResourceName)) { rm.Unload(resreq.ResourceHandle); } else { rm.Unload(resreq.ResourceName); } break; } } catch (Exception e) { if (resreq.Type == RequestType.PrepareResource || resreq.Type == RequestType.LoadResource) { resreq.LoadParams.Clear(); resreq.LoadParams = null; } resreq.Result.Error = true; resreq.Result.Message = e.Message; //return error response var resresp = new ResourceResponse(resource, resreq); return(new WorkQueue.Response(req, false, resresp, e.Message)); } //success if (resreq.Type == RequestType.PrepareResource || resreq.Type == RequestType.LoadResource) { resreq.LoadParams.Clear(); resreq.LoadParams = null; } resreq.Result.Error = false; var resp = new ResourceResponse(resource, resreq); return(new WorkQueue.Response(req, true, resp)); }
/// <see cref="WorkQueue.IRequestHandler.CanHandleRequest"/> //[OgreVersion(1, 7, 2)] public bool CanHandleRequest(WorkQueue.Request req, WorkQueue srcQ) { return(true); }