40 def process(iprot, oprot)
41 name, type, seqid = iprot.read_message_begin
42 unless type == MessageTypes::CALL || type == MessageTypes::ONEWAY
43 iprot.skip(Types::STRUCT)
44 iprot.read_message_end
45 x = ApplicationException.new(
46 ApplicationException::INVALID_MESSAGE_TYPE,
47 "Invalid message type #{type} for function #{name}",
48 )
49 write_error(x, oprot, name, seqid)
50 return false
51 end
52
53 if respond_to?("process_#{name}")
54 begin
55 send("process_#{name}", seqid, iprot, oprot)
56 rescue ArgumentProtocolException => e
57 x = ApplicationException.new(ApplicationException::PROTOCOL_ERROR, e.message)
58 write_error(x, oprot, name, seqid)
59 rescue => e
60 x = ApplicationException.new(ApplicationException::INTERNAL_ERROR, "Internal error")
61 @logger.debug "Internal error : #{e.message}\n#{e.backtrace.join("\n")}"
62 write_error(x, oprot, name, seqid)
63 end
64 true
65 else
66 iprot.skip(Types::STRUCT)
67 iprot.read_message_end
68 x = ApplicationException.new(ApplicationException::UNKNOWN_METHOD, "Unknown function " + name)
69 write_error(x, oprot, name, seqid)
70 false
71 end
72 end