示例#1
0
        /// <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);
                }
            }
        }
示例#2
0
		/// <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;
		}
示例#3
0
 /// <see cref="WorkQueue.IResponseHandler.CanHandleResponse"/>
 ////[OgreVersion(1, 7, 2)]
 public bool CanHandleResponse(WorkQueue.Response res, WorkQueue srcq)
 {
     return(true);
 }
示例#4
0
		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;
		}