public SPDatabaseDetailsResponse GetDatabaseDetails(SPDatabaseDetailsRequest requestData)
        {
            if (requestData == null)
            {
                throw new ArgumentNullException(nameof(requestData));
            }
            if (mDatabaseDetails.ContainsKey(requestData.DatabaseId))
            {
                return(mDatabaseDetails[requestData.DatabaseId]);
            }

            RemoteMessageBinary request = new RemoteMessageBinary();

            request.CommunicationPattern = CommunicationPatternEnum.Request;
            request.MessageTypeCustomId  = string.Format("{0}_{1}", requestData.DatabaseId, GET_SP_DATABASE_DETAILS.ToString());
            request.Timeout = WaitTimeout;
            request.Data    = SerializeRequestData <SPDatabaseDetailsRequest>(requestData);

            RemoteMessageBase response = SendMessage(this, request);

            if (response is RemoteMessageBinary)
            {
                // deserialize response content
                RemoteMessageBinary       arrayResponse   = (RemoteMessageBinary)response;
                SPDatabaseDetailsResponse detailsResponse = DeserializeResponseData <SPDatabaseDetailsResponse>(arrayResponse);
                mDatabaseDetails[requestData.DatabaseId] = detailsResponse;
                return(detailsResponse);
            }
            else if (response is RemoteMessageError)
            {
                RemoteMessageError errorMessage = (RemoteMessageError)response;
                if (errorMessage.ErrorCode == (int)RemoteMessageErrorCodesEnum.Unknown_Message_Type)
                {
                    throw new ApplicationException("Unknown message. No backend configured for understand that message or it is offline.");
                }
                else
                {
                    throw errorMessage.GetException();
                }
            }
            else
            {
                throw new InvalidDataException();
            }
        }
 private static TResponseData DeserializeResponseData <TResponseData>(RemoteMessageBinary message) where TResponseData : class, new()
 {
     if (ENABLE_XML_LOGGING)
     {
         using (MemoryStream stream = new MemoryStream(message.Data))
         {
             stream.Position = 0;
             int id = Interlocked.Increment(ref ID);
             SaveContentIntoFile(string.Format("P{0}_C{1}_{2}.xml", PROCESS_ID.ToString(), id.ToString(), typeof(TResponseData).Name), COMPRESSION.Read(stream));
         }
     }
     using (MemoryStream ms = new MemoryStream())
     {
         ms.Write(message.Data, 0, message.Data.Length);
         ms.Position = 0;
         return(SerializationHelper.Read <TResponseData>(ms, new XmlDataFormatter <TResponseData>()
         {
             Encoding = ENCODING
         }, true));
     }
 }
        public DatabaseResponse GetDatabases()
        {
            if (mContainer != null)
            {
                return(mContainer);
            }

            RemoteMessageBinary request = new RemoteMessageBinary();

            request.CommunicationPattern = CommunicationPatternEnum.Request;
            request.MessageTypeCustomId  = GET_SP_DATABASES.ToString();
            request.Timeout = WaitTimeout;

            RemoteMessageBase response = SendMessage(this, request);

            if (response is RemoteMessageBinary)
            {
                // deserialize response content
                RemoteMessageBinary arrayResponse = (RemoteMessageBinary)response;
                return(mContainer = DeserializeResponseData <DatabaseResponse>(arrayResponse));
            }
            else if (response is RemoteMessageError)
            {
                RemoteMessageError errorMessage = (RemoteMessageError)response;
                if (errorMessage.ErrorCode == (int)RemoteMessageErrorCodesEnum.Unknown_Message_Type)
                {
                    throw new ApplicationException("Unknown message. No backend configured for understand that message or it is offline.");
                }
                else
                {
                    throw errorMessage.GetException();
                }
            }
            else
            {
                throw new InvalidDataException();
            }
        }