DeserializeMessage() static private method

static private DeserializeMessage ( MemoryStream mem, IMethodCallMessage msg ) : IMessage
mem System.IO.MemoryStream
msg IMethodCallMessage
return IMessage
Example #1
0
        public virtual IMessage SyncProcessMessage(IMessage msgRequest)
        {
            IMessage result = null;

            try
            {
                byte[] array  = null;
                byte[] array2 = null;
                CADMethodReturnMessage retmsg = null;
                CADMethodCallMessage   cadmethodCallMessage = CADMethodCallMessage.Create(msgRequest);
                if (cadmethodCallMessage == null)
                {
                    MemoryStream memoryStream = CADSerializer.SerializeMessage(msgRequest);
                    array2 = memoryStream.GetBuffer();
                }
                Context currentContext = Thread.CurrentContext;
                try
                {
                    CrossAppDomainSink.ProcessMessageRes processMessageRes = (CrossAppDomainSink.ProcessMessageRes)AppDomain.InvokeInDomainByID(this._domainID, CrossAppDomainSink.processMessageMethod, null, new object[]
                    {
                        array2,
                        cadmethodCallMessage
                    });
                    array  = processMessageRes.arrResponse;
                    retmsg = processMessageRes.cadMrm;
                }
                finally
                {
                    AppDomain.InternalSetContext(currentContext);
                }
                if (array != null)
                {
                    MemoryStream mem = new MemoryStream(array);
                    result = CADSerializer.DeserializeMessage(mem, msgRequest as IMethodCallMessage);
                }
                else
                {
                    result = new MethodResponse(msgRequest as IMethodCallMessage, retmsg);
                }
            }
            catch (Exception e)
            {
                try
                {
                    result = new ReturnMessage(e, msgRequest as IMethodCallMessage);
                }
                catch (Exception)
                {
                }
            }
            return(result);
        }
#pragma warning restore 169

        public virtual IMessage SyncProcessMessage(IMessage msgRequest)
        {
            IMessage retMessage = null;

            try
            {
                // Time to transit into the "our" domain
                byte [] arrResponse = null;
                byte [] arrRequest  = null;

                CADMethodReturnMessage cadMrm = null;
                CADMethodCallMessage   cadMsg;

                cadMsg = CADMethodCallMessage.Create(msgRequest);
                if (null == cadMsg)
                {
                    // Serialize the request message
                    MemoryStream reqMsgStream = CADSerializer.SerializeMessage(msgRequest);
                    arrRequest = reqMsgStream.GetBuffer();
                }

                Context currentContext = Thread.CurrentContext;

                try
                {
                    // InternalInvoke can't handle out arguments, this is why
                    // we return the results in a structure
                    ProcessMessageRes res = (ProcessMessageRes)AppDomain.InvokeInDomainByID(_domainID, processMessageMethod, null, new object [] { arrRequest, cadMsg });
                    arrResponse = res.arrResponse;
                    cadMrm      = res.cadMrm;
                }
                finally
                {
                    AppDomain.InternalSetContext(currentContext);
                }


                if (null != arrResponse)
                {
                    // Time to deserialize the message
                    MemoryStream respMsgStream = new MemoryStream(arrResponse);

                    // Deserialize the response message
                    retMessage = CADSerializer.DeserializeMessage(respMsgStream, msgRequest as IMethodCallMessage);
                }
                else
                {
                    retMessage = new MethodResponse(msgRequest as IMethodCallMessage, cadMrm);
                }
            }
            catch (Exception e)
            {
                try
                {
                    retMessage = new ReturnMessage(e, msgRequest as IMethodCallMessage);
                }
                catch (Exception)
                {
                    // this is just to be sure
                }
            }

            return(retMessage);
        }