class Mingle::Http::NetHttpMingleRpcClient
Simple blocking client using ruby builtin http lib
Public Instance Methods
call( *argv )
click to toggle source
# File lib/mingle/http.rb, line 104 def call( *argv ) mv = MingleServices.as_mingle_struct( get_mg_req( argv ) ) req = create_request( mv ) resp = Net::HTTP.new( @location.host, @location.port ).start do |http| http.request( req ) end react( :response_received, resp ) case resp when Net::HTTPOK then as_service_response( resp.body ) else raise "Got non-OK response: #{resp} (#{resp.body})" end end
Private Instance Methods
as_service_response( body )
click to toggle source
# File lib/mingle/http.rb, line 97 def as_service_response( body ) ms = MingleCodecs.decode( @codec_ctx.codec, body ) MingleServices.as_service_response( ms ) end
create_request( mv )
click to toggle source
# File lib/mingle/http.rb, line 83 def create_request( mv ) req = Net::HTTP::Post.new( @location.uri ) req.body = MingleCodecs.encode( @codec_ctx.codec, mv ) req.content_type = @codec_ctx.content_type req[ "connection" ] = "close" react( :complete_request, req ) req end
get_mg_req( argv )
click to toggle source
Input checker/converter for call()
# File lib/mingle/http.rb, line 60 def get_mg_req( argv ) # Fail if nothing at all was given not_nil( argv[ 0 ], :mg_req ) case argv.size when 1 case obj = argv[ 0 ] when MingleServiceRequest then obj when Hash then MingleServiceRequest.new( obj ) else raise "Invalid or incomplete call param: #{obj}" end else MingleServiceRequest.new( :namespace => argv[ 0 ], :service => argv[ 1 ], :operation => argv[ 2 ], :parameters => argv[ 3 ], :authentication => argv[ 4 ] ) end end
react( meth, *argv )
click to toggle source
# File lib/mingle/http.rb, line 44 def react( meth, *argv ) case @reactor when Hash if func = @reactor[ meth ] then func.call( *argv ) end else if @reactor.respond_to?( meth ) @reactor.send( meth, *argv ) end end end