protected void ProcessBackgroundRequest(Request r)
{
Log log = LogManager.Instance.DefaultLog;
if (log.LogDetail == LoggingLevel.Verbose)
{
log.Write(LogMessageLevel.Trivial, false, "PageRequestQueue: processing background thread request " + r.RequestType +
" for page ID " + r.Page.PageID.Value + " world " + r.Section.World.Name + " : " +
r.Section.Name, null);
}
try
{
switch (r.RequestType)
{
case RequestType.PreparePage:
{
// Allow procedural generation
if (r.Section.PrepareProcedualePage(r.Page))
{
r.Page.ChangeStatus(UnitStatus.Unloaded, UnitStatus.Prepared);
}
else
{
StreamSerializer ser = r.Section.ReadPageStream(r.Page.PageID);
r.Page.Prepare(ser);
ser = null;
}
// Pass back to render thread to finalise
Request req = new Request(RequestType.LoadPage, r.Page, r.Section);
AddRenderRequest(req);
}
break;
case RequestType.UnpreparePage:
{
// Allow procedural generation
if (r.Section.UnprepareProcedualPage(r.Page))
{
r.Page.ChangeStatus(UnitStatus.Prepared, UnitStatus.Unloaded);
}
else
{
r.Page.UnPrepare();
}
// Pass back to render thread to finalise
Request req = new Request(RequestType.DeletePage, r.Page, r.Section);
AddRenderRequest(req);
}
break;
}
}
catch (Exception e)
{
LogManager.Instance.Write("Error processing background request: " +
e.Message);
}
}
/// <summary>