Exemple #1
0
void RenderBackend::CloseView(POVMS_Message& msg, POVMS_Message& result, int)
{
    if(ValidateFrontendAddress(msg.GetSourceAddress(), result) == false)
        return;

    try
    {
        ViewId vid = msg.GetInt(kPOVAttrib_ViewId);

        ViewMap::iterator i(views.find(vid));

        if(i == views.end())
            throw POV_EXCEPTION_CODE(kInvalidIdentifierErr);

        try { views.erase(vid); } catch(pov_base::Exception&) { }
        try { scene2views[view2scene[vid]].erase(vid); } catch(pov_base::Exception&) { }
        try { view2scene.erase(vid); } catch(pov_base::Exception&) { }

        MakeDoneResult(result);
    }
    catch(pov_base::Exception& e)
    {
        MakeFailedResult(e, result);
    }
    catch(std::runtime_error& e)
    {
        MakeFailedResult(e.what(), result);
    }
    catch(std::bad_alloc&)
    {
        MakeFailedResult(kOutOfMemoryErr, result);
    }
}
Exemple #2
0
void RenderBackend::MakeFailedResult(int error, POVMS_Message& result)
{
    POVMS_Message newmsg(result, result.GetClass(), kPOVMsgIdent_Failed);
    result = newmsg;
    result.SetInt(kPOVAttrib_ErrorNumber, error);
    result.SetString(kPOVAttrib_EnglishText, pov_base::Exception::lookup_code(error).c_str());
}
Exemple #3
0
void RenderBackend::ResumeRender(POVMS_Message& msg, POVMS_Message& result, int)
{
    if(ValidateFrontendAddress(msg.GetSourceAddress(), result) == false)
        return;

    try
    {
        ViewId vid = msg.GetInt(kPOVAttrib_ViewId);

        ViewMap::iterator i(views.find(vid));

        if(i == views.end())
            throw POV_EXCEPTION_CODE(kInvalidIdentifierErr);

        if((i->second->IsRendering() == false) && (i->second->IsPaused() == false))
            throw POV_EXCEPTION_CODE(kNotNowErr);

        i->second->ResumeRender();

        MakeDoneResult(result);
    }
    catch(pov_base::Exception& e)
    {
        MakeFailedResult(e, result);
    }
    catch(std::runtime_error& e)
    {
        MakeFailedResult(e.what(), result);
    }
    catch(std::bad_alloc&)
    {
        MakeFailedResult(kOutOfMemoryErr, result);
    }
}
Exemple #4
0
void RenderBackend::CloseScene(POVMS_Message& msg, POVMS_Message& result, int)
{
    if(ValidateFrontendAddress(msg.GetSourceAddress(), result) == false)
        return;

    try
    {
        SceneId sid = msg.GetInt(kPOVAttrib_SceneId);

        SceneMap::iterator i(scenes.find(sid));

        if(i == scenes.end())
            throw POV_EXCEPTION_CODE(kInvalidIdentifierErr);

        if(scene2views[sid].size() > 0)
            throw POV_EXCEPTION_CODE(kNotNowErr);

        try { scenes.erase(sid); } catch(pov_base::Exception&) { }
        try { scene2views.erase(sid); } catch(pov_base::Exception&) { }

        MakeDoneResult(result);
    }
    catch(pov_base::Exception& e)
    {
        MakeFailedResult(e, result);
    }
    catch(std::runtime_error& e)
    {
        MakeFailedResult(e.what(), result);
    }
    catch(std::bad_alloc&)
    {
        MakeFailedResult(kOutOfMemoryErr, result);
    }
}
Exemple #5
0
void RenderBackend::MakeFailedResult(const pov_base::Exception& e, POVMS_Message& result)
{
    POVMS_Message newmsg(result, result.GetClass(), kPOVMsgIdent_Failed);
    result = newmsg;
    result.SetInt(kPOVAttrib_ErrorNumber, e.code(kCannotHandleRequestErr));
    // pov_base::Exception(...) does a code->string lookup if a string isn't supplied
    result.SetString(kPOVAttrib_EnglishText, e.what());
}
Exemple #6
0
void RenderBackend::ReadFile(POVMS_Message& msg, POVMS_Message& result, int)
{
    if(ValidateFrontendAddress(msg.GetSourceAddress(), result) == false)
        return;

    MakeFailedResult(kCannotHandleRequestErr, result);
}
Exemple #7
0
void RenderBackend::CreateScene(POVMS_Message& msg, POVMS_Message& result, int)
{
    if(ValidateFrontendAddress(msg.GetSourceAddress(), result) == false)
        return;

    try
    {
        POVMSAddress backendAddress = POVMSInvalidAddress;
        int err = POVMS_GetContextAddress(context, &backendAddress);

        if(err != kNoErr)
            throw POV_EXCEPTION_CODE (err);

        shared_ptr<Scene> scene(new Scene(backendAddress, msg.GetSourceAddress(), scenecounter + 1));

        scenecounter++;

        POVMS_Message newresult(result, result.GetClass(), kPOVMsgIdent_Done);
        result = newresult;
        result.SetInt(kPOVAttrib_SceneId, scenecounter);

        scenes[scenecounter] = scene;
        try
        {
            scene2views[scenecounter] = ViewIdSet();
        }
        catch(std::exception&)
        {
            scenes.erase(scenecounter);
            throw;
        }
    }
    catch(pov_base::Exception& e)
    {
        MakeFailedResult(e, result);
    }
    catch(std::runtime_error& e)
    {
        MakeFailedResult(e.what(), result);
    }
    catch(std::bad_alloc&)
    {
        MakeFailedResult(kOutOfMemoryErr, result);
    }
}
Exemple #8
0
void POVMS_SendMessage(POVMS_Message& msg)
{
    int err;

    err = POVMS_Send(nullptr, &msg.data, nullptr, kPOVMSSendMode_NoReply);

    if(err != pov_base::kNoErr)
        throw POV_EXCEPTION_CODE(err);

    msg.DetachData();
}
Exemple #9
0
void RenderBackend::CreateView(POVMS_Message& msg, POVMS_Message& result, int)
{
    if(ValidateFrontendAddress(msg.GetSourceAddress(), result) == false)
        return;

    try
    {
        SceneId sid = msg.GetInt(kPOVAttrib_SceneId);

        SceneMap::iterator i(scenes.find(sid));

        if(i == scenes.end())
            throw POV_EXCEPTION_CODE(kInvalidIdentifierErr);

        shared_ptr<View> view(i->second->NewView(msg.TryGetInt(kPOVAttrib_Width, 160), msg.TryGetInt(kPOVAttrib_Height, 120), viewcounter + 1));

        viewcounter++;

        POVMS_Message newresult(result, result.GetClass(), kPOVMsgIdent_Done);
        result = newresult;
        result.SetInt(kPOVAttrib_ViewId, viewcounter);

        views[viewcounter] = view;
        try { view2scene[viewcounter] = sid; } catch(std::exception&) { views.erase(viewcounter); throw; }
        try { scene2views[sid].insert(viewcounter); } catch(std::exception&) { views.erase(viewcounter); view2scene.erase(viewcounter); throw; }
    }
    catch(pov_base::Exception& e)
    {
        MakeFailedResult(e, result);
    }
    catch(std::runtime_error& e)
    {
        MakeFailedResult(e.what(), result);
    }
    catch(std::bad_alloc&)
    {
        MakeFailedResult(kOutOfMemoryErr, result);
    }
}
void POVMS_SendMessage(POVMSContext contextref, POVMS_Message& msg, POVMS_Message *result, int mode)
{
	int err;

	if(result != NULL)
		err = POVMS_Send(contextref, &msg.data, &result->data, mode);
	else
		err = POVMS_Send(contextref, &msg.data, NULL, mode);

	if(err != kNoErr)
		throw err;

	msg.DetachData();
}
Exemple #11
0
void POVMS_SendMessage(POVMSContext contextref, POVMS_Message& msg, POVMS_Message *result, int mode)
{
    int err;

    if (result != nullptr)
        err = POVMS_Send(contextref, &msg.data, &result->data, mode);
    else
        err = POVMS_Send(contextref, &msg.data, nullptr, mode);

    if(err != pov_base::kNoErr)
        throw POV_EXCEPTION_CODE(err);

    msg.DetachData();
}
Exemple #12
0
void RenderBackend::StartRender(POVMS_Message& msg, POVMS_Message&, int)
{
    try
    {
        ViewId vid = msg.GetInt(kPOVAttrib_ViewId);

        try
        {
            if(validateFrontendAddress(msg.GetSourceAddress()) == false)
                throw POV_EXCEPTION_CODE(kAuthorisationErr);

            ViewMap::iterator i(views.find(vid));

            if(i == views.end())
                throw POV_EXCEPTION_CODE(kInvalidIdentifierErr);

            if(i->second->IsRendering() == true)
                throw POV_EXCEPTION_CODE(kNotNowErr);

            i->second->StartRender(msg);
        }
        catch(pov_base::Exception& e)
        {
            SendViewFailedResult(vid, e, msg.GetSourceAddress());
        }
    }
    catch(pov_base::Exception& e)
    {
        SendFailedResult(e, msg.GetSourceAddress());
    }
    catch(std::runtime_error& e)
    {
        SendFailedResult(e.what(), msg.GetSourceAddress());
    }
    catch(std::bad_alloc&)
    {
        SendFailedResult(kOutOfMemoryErr, msg.GetSourceAddress());
    }
}
Exemple #13
0
void RenderBackend::StartParser(POVMS_Message& msg, POVMS_Message&, int)
{
    try
    {
        SceneId sid = msg.GetInt(kPOVAttrib_SceneId);

        try
        {
            if(validateFrontendAddress(msg.GetSourceAddress()) == false)
                throw POV_EXCEPTION_CODE(kAuthorisationErr);

            SceneMap::iterator i(scenes.find(sid));

            if(i == scenes.end())
                throw POV_EXCEPTION_CODE(kInvalidIdentifierErr);

            i->second->StartParser(msg);
        }
        catch(pov_base::Exception& e)
        {
            SendSceneFailedResult(sid, e, msg.GetSourceAddress());
        }
    }
    catch(pov_base::Exception& e)
    {
        SendFailedResult(e, msg.GetSourceAddress());
    }
    catch(std::runtime_error& e)
    {
        SendFailedResult(e.what(), msg.GetSourceAddress());
    }
    catch(std::bad_alloc&)
    {
        SendFailedResult(kOutOfMemoryErr, msg.GetSourceAddress());
    }
}
Exemple #14
0
void RenderBackend::MakeDoneResult(POVMS_Message& result)
{
    POVMS_Message newmsg(result, result.GetClass(), kPOVMsgIdent_Done);
    result = newmsg;
}
Exemple #15
0
void RenderBackend::MakeFailedResult(const char *str, POVMS_Message& result)
{
    POVMS_Message newmsg(result, result.GetClass(), kPOVMsgIdent_Failed);
    result = newmsg;
    result.SetString(kPOVAttrib_EnglishText, str);
}