/// <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);
}
}
}