コード例 #1
0
        private void initializeSceneNode(ToMergeMessage toMergeMessege, Utils.ThreadLocalSceneBlob localSceneNode)
        {
            CloudBlockBlob flmBlob    = null;
            CloudBlockBlob outputBlob = null;
            string         sceneName  = null;

            string guid = Guid.NewGuid().ToString();

            sceneName = guid + ".png";

            m_log.Info("Getting container");
            BlobContainerPermissions permissions = renderStorage.Get().GetPermissions(BlobName.FILM_BLOB);

            permissions.PublicAccess = BlobContainerPublicAccessType.Container;
            renderStorage.Get().SetPermissions(BlobName.FILM_BLOB, permissions);

            m_log.Info("Getting blob reference");
            flmBlob    = renderStorage.Get().CreateBlob(BlobName.FILM_BLOB, toMergeMessege.Flm); //here new flm part(rendered by worker) is placed
            outputBlob = renderStorage.Get().CreateBlob(BlobName.IMAGE_BLOB, sceneName);         //image will be stored here
            m_log.Info("/Getting blob reference");

            localSceneNode.FlmBlob    = flmBlob;    //new worker's flm file(sent by worker to merge it into main file)
            localSceneNode.OutputBlob = outputBlob; //image will be stored here
            localSceneNode.SceneName  = sceneName;  //new GUID blob
        }
コード例 #2
0
 /// <summary>
 /// Occurs when merger gets message to merge flm
 /// </summary>
 /// <param name="merMessage">Message from worker</param>
 /// <returns>True is merging process should be ended</returns>
 private bool toMergeMessageEvent(MergerMessage merMessage)
 {
     try
     {
         while (true)
         {
             if (m_threadsCount < m_maxThreadsCount)
             {
                 Thread thread = new Thread(() => updateMessageEvent(merMessage));
                 thread.Start();
                 m_log.Info("New thread started. Thread count: " + m_threadsCount.ToString());
                 break;
             }
             else
             {
                 Thread.Sleep(3000);
             }
         }
         return(false);
     }
     catch (Exception ex)
     {
         m_log.Error("ToMergeMessage ex: " + ex.Message);
         ToMergeMessage            toMergeMessege = merMessage as ToMergeMessage;
         MergerUpdateFailedMessage errMes         = new MergerUpdateFailedMessage(ex.Message, m_scene.StartMessage.SessionId);
         m_dispatcherQueues[toMergeMessege.ID].AddMessage(errMes);
         return(true);
     }
 }
コード例 #3
0
 private void saveAndSendFlm()
 {
     try
     {
         m_log.Info("save flm start");
         string flmName = saveFLM();
         m_log.Info("save flm finish");
         ToMergeMessage message = new ToMergeMessage(flmName, m_sceneUri, m_sceneID);
         m_mergerHandler.AddMessage(message);
         m_log.Info("Messege sent to merger");
     }
     catch (Exception e)
     {
         m_log.Error("flm save UNHANDLED error: " + e.Message);
     }
 }
コード例 #4
0
        private void updateMessageEvent(MergerMessage merMessage)
        {
            m_log.Info("ToMergeMessage. ID: " + m_scene.SceneID.ToString());
            lock (m_downloadFlmLock)
            {
                ++m_threadsCount;
            }
            ToMergeMessage toMergeMessege = merMessage as ToMergeMessage;

            Utils.ThreadLocalSceneBlob threadSceneNode = new Utils.ThreadLocalSceneBlob();
            m_log.Info("InitializeSceneNode. ID: " + m_scene.SceneID.ToString());
            initializeSceneNode(toMergeMessege, threadSceneNode);
            m_log.Info("/InitializeSceneNode. ID: " + m_scene.SceneID.ToString());
            m_log.Info("Merge. ID: " + m_scene.SceneID.ToString());
            merge(threadSceneNode);
            m_log.Info("/Merge. ID: " + m_scene.SceneID.ToString());
            //scene name means .png blob uri
            lock (m_makePicLock)
            {
                if (!m_stopBySpp)
                {
                    m_percentageCompleted += m_oneBatchInPercents;
                }
                if (m_makePicStopwatch.ElapsedMilliseconds > DocConstants.MAKE_PICTURE_HOLDUP)
                {
                    createImage(threadSceneNode.OutputBlob);
                    double spp = m_engine.GetSppOfLoadedFLM();
                    m_log.Info("SPP: " + spp);
                    if (m_stopBySpp)
                    {
                        m_percentageCompleted = (float)((spp * 100.0) / m_scene.StartMessage.RequiredSpp);
                    }
                    m_log.Info("Completed " + m_percentageCompleted);
                    MergerUpdateMessage updateMsg = new MergerUpdateMessage(threadSceneNode.SceneName,
                                                                            m_scene.StartMessage.SessionId, m_percentageCompleted, spp, m_requiredSpp);
                    m_dispatcherQueues[toMergeMessege.ID].AddMessage(updateMsg);
                    m_makePicStopwatch.Restart();
                }
                --m_threadsCount;
            }
        }