Example #1
0
        public static bool OnProcessAnswer(List<object> adminSessionArray, HttpSessionState userSession, IGAnswer answer)
        {
            int nAnswerId = answer.GetId();
            XmlNode xmlNodeRequestGuid = answer.GetAttribute(IGAnswer.IGANSWER_REQGUID);
            IGPEOutput output = null;
            if (adminSessionArray != null)
            {
                foreach (HttpSessionState adminSession in adminSessionArray)
                {
                    //  stack output for admins
                    if ((nAnswerId != IGSMAnswer.IGSMANSWER_GETSTATUS) &&
                        (nAnswerId != (int)IGAnswer.IGANSWER_ID.IGANSWER_WORKSPACE_HEARTHBEAT))
                    {
                        output = (IGPEOutput)adminSession[IGPEMultiplexing.SESSIONMEMBER_OUTPUT];
                        if (output != null)
                            output.Stack(true, answer);
                    }
                }
            }

            // process server answer
            if (nAnswerId >= IGSMAnswer.IGSMANSWER_ERROR)
                stackError(adminSessionArray, answer.ToString());

            if (userSession == null)
                return false;

            // process user answer
            if (nAnswerId != (int)IGAnswer.IGANSWER_ID.IGANSWER_WORKSPACE_DISCONNECTED)
            {
                // update user session
                answer.GetParams(userSession);

                // stack output for current user
                output = (IGPEOutput)userSession[IGPEMultiplexing.SESSIONMEMBER_OUTPUT];
                if (output != null)
                    output.Stack(false, answer);
            }
            return true;
        }
 public override bool ProcessAnswer(IGAnswer answer)
 {
     // dispatch server messages
     List<object> adminSessionArray = m_mapAdminSessions.GetArrayValues();
     XmlNode xmlNodeRequestLogin = answer.GetAttribute(IGAnswer.IGANSWER_USERLOGIN);
     if ((xmlNodeRequestLogin == null) || (xmlNodeRequestLogin.Value == ""))
     {
         IGPEAnswer.OnProcessAnswer(adminSessionArray, null, answer);
         return base.ProcessAnswer(answer);  // server answer, leave
     }
     // dispatch user messages
     HttpSessionState userSession = (HttpSessionState)m_mapUserSessions.Get(xmlNodeRequestLogin.Value);
     if (userSession == null)
         return false;
     if (!IGPEAnswer.OnProcessAnswer(adminSessionArray, userSession, answer))
         AppendError("Server error: Failed processing answer " + answer.ToString());
     // end of user disconnection
     if (answer.GetId() == (int)IGAnswer.IGANSWER_ID.IGANSWER_WORKSPACE_DISCONNECTED)
     {
         if (!DisconnectUser(xmlNodeRequestLogin.Value, false))
             AppendError(userSession, IGPEMULTIPLEXING_ERROR_UNKNOWN);
     }
     return base.ProcessAnswer(answer);
 }
 public static bool Remove(IGAnswer answer)
 {
     if (answer.GetId() == (int)IGAnswer.IGANSWER_ID.IGANSWER_WORKSPACE_DISCONNECTED)
     {
         // server does not wait for a disconnection answer
         return true;
     }
     else
     {
         bool bRes = true;
         XmlNode xmlNodeRequestGuid = answer.GetAttribute(IGAnswer.IGANSWER_REQGUID);
         if (xmlNodeRequestGuid == null)
             bRes = false;
         IGRequestProcessing reqProc = GetRequest(xmlNodeRequestGuid.Value);
         if (reqProc == null)
             bRes = false;
         IGServerManager serverMgr = IGServerManager.Instance;
         if (!bRes)
         {
             serverMgr.AppendError("- IGRequestProcessing failed to match this answer with a request: \"" + answer.ToString() + "\"");
             return false;
         }
         if (answer.IsError() || answer.IsSMError())
         {
             serverMgr.AppendError("- IGRequestProcessing Error " + answer.ToString());
             if (answer.IsSMError())
                 ((IGServerManagerRemote)serverMgr).DisconnectUser(answer.GetParameterValue(IGRequest.IGREQUEST_USERLOGIN), true);
         }
         else if (!answer.Silent)
             serverMgr.AppendInfo("IGRequestProcessing Answer " + answer.ToString());
         IGRequest finishedReq = reqProc.GetRequest();
         if (finishedReq != null)
             finishedReq.FireEventDone(answer.GetXml());
         return remove(xmlNodeRequestGuid.Value);
     }
 }