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