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); }
//-- 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); }
// 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)); }
//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())); } }
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); }
// Function call using builders public abstract Result BuilderCall(string name, TypedValueBuilder arguments);