예제 #1
0
        private bool isAbort()
        {
            //check for abort message
            MergerMessage abortMessage = m_abortQueue.GetMessageByType(typeof(AbortMergeMessage));

            if (abortMessage != null)
            {
                waitForThreads();
                m_log.Info("RenderingAbortMessage. ID: " + m_abortQueue.getSuffix().ToString());
                AbortMergeMessage abortMes = abortMessage as AbortMergeMessage;
                m_engine.Cleanup();
                if (m_dispatcherQueues.ContainsKey(abortMes.SceneID))
                {
                    m_dispatcherQueues[abortMes.SceneID].Delete();
                    m_dispatcherQueues.Remove(abortMes.SceneID);
                }
                clearSceneContainer(abortMes.SceneName);
                m_isMerging = false;
                m_instanceQueue.Clear();
                m_instanceQueue.Delete();
                m_abortQueue.Delete();
                m_log.Info("/RenderingAbortMessage");
                return(true);
            }
            return(false);
        }
예제 #2
0
        //check if abort message was send by client
        private bool isDisconnected(NetMessageHandler handler, string sessionId)
        {
            sendClientMessage(handler, StatusMessage.StatusEnum.OK);

            StatusMessage statusMess = handler.GetSynchMessage() as StatusMessage;

            if (((statusMess != null) && (statusMess.Status == StatusMessage.StatusEnum.Aborted)) || (!handler.Connected()))
            {
                try
                {
                    m_log.Info("Got abort message or connection was disconnected. ID: " + m_threadsID[sessionId].ToString());
                    //sending abort messeges to workers
                    for (int i = 0; i < m_renderAbortHandlers[m_threadsID[sessionId]].Count; ++i)
                    {
                        try
                        {
                            m_renderAbortHandlers[m_threadsID[sessionId]][i].AddMessage(new ToAbortRenderMessage());
                        }
                        catch (Exception e)
                        {
                            m_log.Warning("renderQueue was already deleted. Error: " + m_renderAbortHandlers[m_threadsID[sessionId]][i].ToString() + ". ID: " + m_threadsID[sessionId].ToString());
                            m_log.Warning(e.Message);
                        }
                    }
                    MessageQueue <MergerMessage> abortQueue    = new MessageQueue <MergerMessage>(m_threadsID[sessionId].ToString() + "abort");
                    AbortMergeMessage            mergerMessage = new AbortMergeMessage("uniqueBlob" + m_threadsID[sessionId].ToString() + '_' + sessionId.ToString(), m_threadsID[sessionId]);
                    abortQueue.AddMessage(mergerMessage);
                    m_renderAbortHandlers.Remove(m_threadsID[sessionId]);
                    m_log.Info("Aborted by user. ID: " + m_threadsID[sessionId].ToString());
                    return(true);
                }
                catch (Exception e)
                {
                    m_log.Error("Error for ID " + m_threadsID[sessionId] + " when checking connection status:" + e.Message);
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }