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