/// <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); } }
private bool mergerFinishMessageEvent(DispetcherMessage dispMessage) { try { MergerFinishMessage mergMessage = dispMessage as MergerFinishMessage; if (!mergMessage.IsError) { m_connectionHandlers[dispMessage.SessionId].SendSynchMessage(new RenderFinishMessage(mergMessage.FlmUri, mergMessage.SPP)); } else { sendError(m_connectionHandlers[dispMessage.SessionId], "Error occurred on worker. Likely scene is damaged"); } m_log.Info("SPP: " + mergMessage.SPP.ToString()); } catch (Exception e) { m_log.Warning("Error sending sync message. " + e.Message); } if (m_renderAbortHandlers.ContainsKey(m_threadsID[dispMessage.SessionId])) { m_renderAbortHandlers.Remove(m_threadsID[dispMessage.SessionId]); } MessageQueue <DispetcherMessage> dispatcherHandler = new MessageQueue <DispetcherMessage>(m_threadsID[dispMessage.SessionId].ToString()); dispatcherHandler.Delete(); m_log.Info("/MergerFinishMessage."); return(true); }