Beispiel #1
0
 /// <summary>
 /// Waits for merging process and sends finish message to dispatcher.
 /// </summary>
 /// <param name="finishMsg">Finish message from worker</param>
 private void finishRender(RenderingFinishMessage finishMsg)
 {
     try
     {
         waitForThreads();   //if at least one thread stuck here whole role will stop work
                             //but this sceario is very unlikely
         m_log.Info("getting flm URI");
         double spp             = -1;
         string completedFlmUri = string.Empty;
         if (!finishMsg.IsError)
         {
             completedFlmUri = saveFlmToBlob(m_scene.StartMessage.SessionId);
             if (m_stopBySpp)
             {
                 spp = m_scene.StartMessage.RequiredSpp;
             }
             else
             {
                 spp = m_engine.GetSppOfLoadedFLM();
             }
             m_log.Info("Sending message to dispatcher");
         }
         int id = Utils.RoleID();
         MergerFinishMessage msg = new MergerFinishMessage(id, m_scene.StartMessage.SessionId, completedFlmUri, spp,
                                                           finishMsg.IsError);
         m_dispatcherQueues[finishMsg.SceneID].AddMessage(msg);
     }
     catch (Exception e)
     {
         m_log.Warning("Error on worker. Probably error with scene. " + e.Message);
     }
 }
Beispiel #2
0
 /// <summary>
 /// Clears all data after merging making it ready for new scene
 /// </summary>
 /// <param name="finishMsg">Render finish message from worker</param>
 private void cleanup(RenderingFinishMessage finishMsg)
 {
     clearSceneContainer(finishMsg.SceneName);
     m_engine.Cleanup();
     m_dispatcherQueues.Remove(finishMsg.SceneID);
     m_isMerging = false;
     m_instanceQueue.Delete();
     m_abortQueue.Delete();
 }
Beispiel #3
0
        private void interruptRender(string errorMsg)
        {
            Trace.TraceError("Exception when processing queue item. Message: '{0}'", errorMsg);
            m_log.Error("Exception when processing queue item. Message: " + errorMsg);
            int id = Utils.RoleID();
            RenderingFinishMessage finishMessage = new RenderingFinishMessage(id, null, m_sceneID, true); //if error with scene

            m_mergerHandler.AddMessage(finishMessage);                                                    //the best way is just free resources
            abort();
            renderFinished();
        }
Beispiel #4
0
 private void onRenderFinished()
 {
     m_engine.Exit();
     if (!m_aborted)
     {
         int id = Utils.RoleID();
         RenderingFinishMessage finishMessage = new RenderingFinishMessage(id, Scene.GetFileName(m_scene.InputPath), m_sceneID, false);
         m_mergerHandler.AddMessage(finishMessage);             //render has been finished
     }
     m_isRendering = false;
     m_log.Info("Timer finished");
 }
Beispiel #5
0
        /// <summary>
        /// Occurs when merger gets message of render finish
        /// </summary>
        /// <param name="merMessage">Message from worker</param>
        private bool renderingFinishMessageEvent(MergerMessage merMessage)
        {
            RenderingFinishMessage finishMsg = merMessage as RenderingFinishMessage;

            m_log.Info("RenderingFinishMessage.\nScene ID: " + finishMsg.SceneID);
            m_scene.IncrementFinishedRolesNumber();
            m_log.Info("Instances finished: " + m_scene.InstancesFinished + "\nInstances required: " + m_scene.StartMessage.RenderRoleCnt + " ID: " + finishMsg.SceneID);
            if (m_scene.StartMessage.RenderRoleCnt == m_scene.InstancesFinished)
            {
                finishRender(finishMsg);
                cleanup(finishMsg);
                m_log.Info("Merger finished");
                return(true);
            }
            else
            {
                m_log.Info("Continue with other instances");
                return(false);
            }
        }