Ejemplo n.º 1
0
        // MessageToProtocolRequest
        //
        // Converts a IMessage representing a method call (IMethodCallMessage)
        // into the Ice protocol representation, and writes it to stream outStream.
        public static void MessageToProtocolRequest(Stream outStream, IMessage msg)
        {
            IMethodCallMessage mcall = msg as IMethodCallMessage;

            Ice.ProtocolWriter pw = new Ice.ProtocolWriter(outStream);

            // extract message bits from mcall
            Ice.Identity      id        = (Ice.Identity)mcall.LogicalCallContext.GetData("__iceIdentity");
            string[]          facetPath = (string[])mcall.LogicalCallContext.GetData("__iceFacetPath");
            Ice.OperationMode opMode    = (Ice.OperationMode)mcall.LogicalCallContext.GetData("__iceOperationMode");
            Ice.Context       ctx       = (Ice.Context)mcall.LogicalCallContext.GetData("__iceContext");
            bool oneWay = (bool)mcall.LogicalCallContext.GetData("__iceOneWay");


            int thisRequestId = 0;

            if (!oneWay)
            {
                thisRequestId = IceChannelUtils.NextRequestId;
            }

            mcall.LogicalCallContext.SetData("__iceRequestId", thisRequestId);

            ParameterInfo[] paramInfos = mcall.MethodBase.GetParameters();

            // Create an Ice protocol message
            pw.BeginMessage(Ice.MessageType.Request);
            pw.WriteRequestMessageHeader(thisRequestId,
                                         id,
                                         facetPath,
                                         mcall.MethodName,
                                         Ice.OperationMode.Normal,
                                         ctx);

            // now write the args
            pw.BeginEncapsulation();
            for (int i = 0; i < mcall.ArgCount; i++)
            {
                if (!paramInfos[i].IsOut)
                {
                    if (Attribute.GetCustomAttribute(paramInfos[i], typeof(Ice.AsProxy)) != null)
                    {
                        pw.WriteProxy(mcall.Args[i], paramInfos[i].ParameterType);
                    }
                    else
                    {
                        pw.WriteObject(mcall.Args[i], paramInfos[i].ParameterType);
                    }
                }
            }
            pw.WriteClassInstances();
            pw.EndEncapsulation();
            pw.EndMessage();
        }
Ejemplo n.º 2
0
        public virtual void WriteBatchRequestMessageEntry(Ice.Identity id,
                                                          string[] facet,
                                                          string operation,
                                                          OperationMode omode,
                                                          Ice.Context ctx)
        {
            if (_currentMessageType != MessageType.BatchRequest)
            {
                throw new InvalidOperationException("WriteRequestMessageHeader called with current message other than Request");
            }

            WriteObject(id);
            WriteObject(facet);
            Write(operation);
            Write(Convert.ToByte(omode));
            WriteObject(ctx);

            // params in an encapsulation need to follow this
        }
Ejemplo n.º 3
0
        public void ice_unmarshal(Ice.ProtocolReader pr)
        {
            id.name     = pr.ReadString();
            id.category = pr.ReadString();
            int facetlen = pr.ReadSize();

            facet = new string[facetlen];
            for (int i = 0; i < facetlen; i++)
            {
                facet[i] = pr.ReadString();
            }
            operation = pr.ReadString();
            mode      = pr.ReadByte();
            int count = pr.ReadSize();

            context = new Ice.Context();
            for (int i = 0; i < count; i++)
            {
                string k = pr.ReadString();
                string v = pr.ReadString();
                context.Add(k, v);
            }
        }
Ejemplo n.º 4
0
 public void ice_unmarshal (Ice.ProtocolReader pr) {
   id.name = pr.ReadString ();
   id.category = pr.ReadString ();
   int facetlen = pr.ReadSize();
   facet = new string[facetlen];
   for (int i = 0; i < facetlen; i++)
     facet[i] = pr.ReadString();
   operation = pr.ReadString();
   mode = pr.ReadByte();
   int count = pr.ReadSize();
   context = new Ice.Context();
   for (int i = 0; i < count; i++) {
     string k = pr.ReadString();
     string v = pr.ReadString();
     context.Add (k, v);
   }
 }