示例#1
0
        private bool ProcessMessage(TMessage msg, TProtocol iprot, TProtocol oprot)
        {
            iprot.ReadStructBegin(); //???
            ReadFields(iprot);
            iprot.ReadStructEnd();
            iprot.ReadMessageEnd();
            var ok = true;

            try {
                var result = _gateway.BuilderCall(msg.Name, _arguments);
                if (result.Ok)
                {
                    oprot.WriteMessageBegin(new TMessage(msg.Name, TMessageType.Reply, msg.SeqID));
                    _result = (TypedValueBuilder)result.Value;
                    WriteResult(oprot, true, msg);
                }
                else
                {
                    TApplicationException x = new TApplicationException(TApplicationException.ExceptionType.Unknown, result.Message);
                    oprot.WriteMessageBegin(new TMessage(msg.Name, TMessageType.Exception, msg.SeqID));
                    x.Write(oprot);
                }
            } catch (Exception ex) {
                TApplicationException x = new TApplicationException(TApplicationException.ExceptionType.InternalError, ex.ToString());
                oprot.WriteMessageBegin(new TMessage(msg.Name, TMessageType.Exception, msg.SeqID));
                x.Write(oprot);
                ok = false;
            }
            oprot.WriteMessageEnd();
            oprot.Transport.Flush();
            return(ok);
        }
示例#2
0
        //-- builder interface
        public override Result BuilderCall(string name, TypedValueBuilder arguments)
        {
            Logger.WriteLine(3, "BuilderCall {0} args={1}", name, arguments.StructSize);
            var session = RequestSession.Open(this, _catalog);
            var result  = session.BuilderCall(name, arguments);

            session.Close();
            Logger.WriteLine(3, "[BC {0}]", result.Ok);
            return(result);
        }
示例#3
0
        // Support implementation functions at catalog level
        public override TypedValueBuilder GetTypedValueBuilder(string name)
        {
            var types = _catalog.GlobalVars.GetArgumentTypes(name);

            if (types == null)
            {
                return(null);
            }
            return(TypedValueBuilder.Create(types));
        }
示例#4
0
        //public bool Call(string name, TypedValueBuilder arguments, out TypedValueBuilder result) {
        //  result = null;
        //  return false;
        //}

        // call supporting Thrift interface
        internal Result BuilderCall(string name, TypedValueBuilder arguments)
        {
            var kind = _catvars.GetKind(name);

            Logger.Assert(kind == EntryKinds.Code);
            var        expr = (_catvars.GetValue(name) as CodeValue).Value;
            TypedValue retvalue;

            try {
                var argvalue = DataRow.CreateNonTuple(expr.Lookup, arguments.FilledValues());
                retvalue = _evaluator.Exec(expr.Code, argvalue);
                return(Result.Success(TypedValueBuilder.Create(new TypedValue[] { retvalue })));
            } catch (ProgramException ex) {
                return(Result.Failure(ex.ToString()));
            }
        }
示例#5
0
        public bool Process(TProtocol iprot, TProtocol oprot)
        {
            var ok = false;

            try {
                TMessage msg = iprot.ReadMessageBegin();
                _arguments = _gateway.GetTypedValueBuilder(msg.Name);
                if (_arguments == null)
                {
                    TProtocolUtil.Skip(iprot, TType.Struct);
                    iprot.ReadMessageEnd();
                    TApplicationException x = new TApplicationException(TApplicationException.ExceptionType.UnknownMethod, "Invalid method name: '" + msg.Name + "'");
                    oprot.WriteMessageBegin(new TMessage(msg.Name, TMessageType.Exception, msg.SeqID));
                    x.Write(oprot);
                    oprot.WriteMessageEnd();
                    oprot.Transport.Flush();
                    return(true);
                }
                ok = ProcessMessage(msg, iprot, oprot);
            } catch (IOException) {
                return(false);
            }
            return(ok);
        }
示例#6
0
 // Function call using builders
 public abstract Result BuilderCall(string name, TypedValueBuilder arguments);