예제 #1
0
 public IGRequestProcessing(IGRequest request, IGServer server)
 {
     m_server = server;
     m_request = request;
     m_xmlNodeRequest = m_request.GetXmlNode();
     XmlNode xmlNodeTypeId = request.GetAttribute(IGRequest.IGREQUEST_NODETYPE);
     if (xmlNodeTypeId != null)
         m_nTypeId = Convert.ToInt32(xmlNodeTypeId.Value);
     XmlNode xmlNodeReqId = request.GetAttribute(IGRequest.IGREQUEST_NODEID);
     if (xmlNodeReqId != null)
         m_nReqId = Convert.ToInt32(xmlNodeReqId.Value);
     XmlNode xmlNodeGuid = request.GetAttribute(IGRequest.IGREQUEST_GUID);
     if (xmlNodeGuid != null)
         m_sGuid = xmlNodeGuid.Value;
     XmlNode xmlNodeUser = request.GetParameter(IGRequest.IGREQUEST_USERLOGIN);
     if (xmlNodeUser != null)
         m_sUser = xmlNodeUser.Value;
     XmlNode xmlNodeFrameId = request.GetParameter(IGRequest.IGREQUEST_FRAMEID);
     if (xmlNodeFrameId != null)
         m_sFrameId = xmlNodeFrameId.Value;
     m_nProgressTime = DateTime.UtcNow.Ticks;
     m_nProgress = 0;
     m_eStatus = IGSMStatusUser.IGState.IGSMSTATUS_WORKING;
     m_timer = new System.Timers.Timer();
     m_timer.Elapsed += new ElapsedEventHandler(OnSurveyProcessingEvent);
     m_timer.Interval = HC.IGREQPROC_PROGRESS_CHECKTIME;
     m_timer.Start();
 }
예제 #2
0
 public override IGSMStatus.IGState GetState()
 {
     lock (m_lockObject)
     {
         if (((DateTime.UtcNow.Ticks - m_nHearthbeatTime) / 10000) > HC.HEARTHBEAT_REMOTE_SERVERTIMEOUT_NOTRESPONDING)
         {
             if (m_connection != null)
             {
                 if (m_connection.Ping())
                 {
                     ResetState();
                     return m_eState;
                 }
             }
             m_eState = IGSMStatus.IGState.IGSMSTATUS_NOTRESPONDING;
         }
         else
         {
             m_eState = IGSMStatus.IGState.IGSMSTATUS_READY;
         }
         return m_eState;
     }
 }
예제 #3
0
 public void SetStateDown()
 {
     lock (m_lockObject)
     {
         m_nHearthbeatTime = -1;
         m_eState = IGSMStatus.IGState.IGSMSTATUS_NOTRESPONDING;
     }
 }
예제 #4
0
 public override void ResetState()
 {
     lock (m_lockObject)
     {
         m_nHearthbeatTime = DateTime.UtcNow.Ticks;
         m_eState = IGSMStatus.IGState.IGSMSTATUS_READY;
     }
 }
예제 #5
0
 public void OnSurveyProcessingEvent(object source, ElapsedEventArgs e)
 {
     lock (this)
     {
         if (((DateTime.UtcNow.Ticks - m_nProgressTime) / 10000) > HC.PROGRESS_TIMEOUT_LOCAL)
         {
             if (m_eStatus != IGSMStatusUser.IGState.IGSMSTATUS_NOTRESPONDING)
             {
                 IGServerManager serverMgr = IGServerManager.Instance;
                 if (m_nNbRetry++ >= 1)
                 {
                     //m_request.SetParameter(IGRequest.IGREQUEST_RETRY, m_nNbRetry.ToString());
                     //m_nProgressTime = DateTime.UtcNow.Ticks;
                     m_eStatus = IGSMStatusUser.IGState.IGSMSTATUS_NOTRESPONDING;
                     serverMgr.AppendError("TIMEOUT, request not responding: " + m_request.ToString());
                     IGRequestProcessing.Remove(this);
                 }
             }
         }
         else
         {
             m_eStatus = IGSMStatusUser.IGState.IGSMSTATUS_WORKING;
         }
     }
 }