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); } }