Kevin Clark | 97d2166 | 2008-06-18 00:53:28 +0000 | [diff] [blame] | 1 | module Thrift |
2 | module Client | ||||
3 | def initialize(iprot, oprot=nil) | ||||
4 | @iprot = iprot | ||||
5 | @oprot = oprot || iprot | ||||
6 | @seqid = 0 | ||||
Kevin Clark | 9bf3362 | 2008-06-18 00:53:07 +0000 | [diff] [blame] | 7 | end |
Kevin Clark | 9bf3362 | 2008-06-18 00:53:07 +0000 | [diff] [blame] | 8 | |
Kevin Clark | 97d2166 | 2008-06-18 00:53:28 +0000 | [diff] [blame] | 9 | def send_message(name, args_class, args = {}) |
Kevin Clark | b8a7ad7 | 2008-06-18 00:58:23 +0000 | [diff] [blame] | 10 | @oprot.write_message_begin(name, MessageTypes::CALL, @seqid) |
Kevin Clark | 97d2166 | 2008-06-18 00:53:28 +0000 | [diff] [blame] | 11 | data = args_class.new |
12 | args.each do |k, v| | ||||
13 | data.send("#{k.to_s}=", v) | ||||
14 | end | ||||
Kevin Clark | 5ebb23b | 2008-07-28 22:16:28 +0000 | [diff] [blame] | 15 | begin |
16 | data.write(@oprot) | ||||
17 | rescue StandardError => e | ||||
18 | @oprot.trans.close | ||||
19 | raise e | ||||
20 | end | ||||
Kevin Clark | d389f54 | 2008-06-18 01:11:41 +0000 | [diff] [blame] | 21 | @oprot.write_message_end |
22 | @oprot.trans.flush | ||||
Kevin Clark | 97d2166 | 2008-06-18 00:53:28 +0000 | [diff] [blame] | 23 | end |
Kevin Clark | 9bf3362 | 2008-06-18 00:53:07 +0000 | [diff] [blame] | 24 | |
Kevin Clark | 97d2166 | 2008-06-18 00:53:28 +0000 | [diff] [blame] | 25 | def receive_message(result_klass) |
Kevin Clark | d389f54 | 2008-06-18 01:11:41 +0000 | [diff] [blame] | 26 | fname, mtype, rseqid = @iprot.read_message_begin |
Kevin Clark | 97d2166 | 2008-06-18 00:53:28 +0000 | [diff] [blame] | 27 | handle_exception(mtype) |
28 | result = result_klass.new | ||||
29 | result.read(@iprot) | ||||
Kevin Clark | d389f54 | 2008-06-18 01:11:41 +0000 | [diff] [blame] | 30 | @iprot.read_message_end |
Kevin Clark | 5a2d0ad | 2008-06-18 01:14:48 +0000 | [diff] [blame] | 31 | result |
Kevin Clark | 97d2166 | 2008-06-18 00:53:28 +0000 | [diff] [blame] | 32 | end |
33 | |||||
34 | def handle_exception(mtype) | ||||
Kevin Clark | 2960044 | 2008-06-18 00:54:13 +0000 | [diff] [blame] | 35 | if mtype == MessageTypes::EXCEPTION |
Kevin Clark | d389f54 | 2008-06-18 01:11:41 +0000 | [diff] [blame] | 36 | x = ApplicationException.new |
Kevin Clark | 97d2166 | 2008-06-18 00:53:28 +0000 | [diff] [blame] | 37 | x.read(@iprot) |
Kevin Clark | d389f54 | 2008-06-18 01:11:41 +0000 | [diff] [blame] | 38 | @iprot.read_message_end |
Kevin Clark | 97d2166 | 2008-06-18 00:53:28 +0000 | [diff] [blame] | 39 | raise x |
40 | end | ||||
Kevin Clark | 9bf3362 | 2008-06-18 00:53:07 +0000 | [diff] [blame] | 41 | end |
42 | end | ||||
Kevin Clark | fe897d3 | 2008-06-18 01:02:31 +0000 | [diff] [blame] | 43 | deprecate_module! :ThriftClient => Client |
Kevin Clark | 9bf3362 | 2008-06-18 00:53:07 +0000 | [diff] [blame] | 44 | end |