blob: 997923ae2e0f6dca385a71987ddde6d978bd7290 [file] [log] [blame]
Kevin Clark97d21662008-06-18 00:53:28 +00001module Thrift
2 module Client
3 def initialize(iprot, oprot=nil)
4 @iprot = iprot
5 @oprot = oprot || iprot
6 @seqid = 0
Kevin Clark9bf33622008-06-18 00:53:07 +00007 end
Kevin Clark9bf33622008-06-18 00:53:07 +00008
Kevin Clark97d21662008-06-18 00:53:28 +00009 def send_message(name, args_class, args = {})
Kevin Clarkb8a7ad72008-06-18 00:58:23 +000010 @oprot.write_message_begin(name, MessageTypes::CALL, @seqid)
Kevin Clark97d21662008-06-18 00:53:28 +000011 data = args_class.new
12 args.each do |k, v|
13 data.send("#{k.to_s}=", v)
14 end
Kevin Clark5ebb23b2008-07-28 22:16:28 +000015 begin
16 data.write(@oprot)
17 rescue StandardError => e
18 @oprot.trans.close
19 raise e
20 end
Kevin Clarkd389f542008-06-18 01:11:41 +000021 @oprot.write_message_end
22 @oprot.trans.flush
Kevin Clark97d21662008-06-18 00:53:28 +000023 end
Kevin Clark9bf33622008-06-18 00:53:07 +000024
Kevin Clark97d21662008-06-18 00:53:28 +000025 def receive_message(result_klass)
Kevin Clarkd389f542008-06-18 01:11:41 +000026 fname, mtype, rseqid = @iprot.read_message_begin
Kevin Clark97d21662008-06-18 00:53:28 +000027 handle_exception(mtype)
28 result = result_klass.new
29 result.read(@iprot)
Kevin Clarkd389f542008-06-18 01:11:41 +000030 @iprot.read_message_end
Kevin Clark5a2d0ad2008-06-18 01:14:48 +000031 result
Kevin Clark97d21662008-06-18 00:53:28 +000032 end
33
34 def handle_exception(mtype)
Kevin Clark29600442008-06-18 00:54:13 +000035 if mtype == MessageTypes::EXCEPTION
Kevin Clarkd389f542008-06-18 01:11:41 +000036 x = ApplicationException.new
Kevin Clark97d21662008-06-18 00:53:28 +000037 x.read(@iprot)
Kevin Clarkd389f542008-06-18 01:11:41 +000038 @iprot.read_message_end
Kevin Clark97d21662008-06-18 00:53:28 +000039 raise x
40 end
Kevin Clark9bf33622008-06-18 00:53:07 +000041 end
42 end
Kevin Clarkfe897d32008-06-18 01:02:31 +000043 deprecate_module! :ThriftClient => Client
Kevin Clark9bf33622008-06-18 00:53:07 +000044end