lib/shatter/web/server.rb in shatter-rb-0.0.2 vs lib/shatter/web/server.rb in shatter-rb-0.1.0

- old
+ new

@@ -4,42 +4,49 @@ require "json" module Shatter module Web class Server - class << self - attr_reader :application - attr_writer :application + attr_accessor :application end def self.call(env) request = Rack::Request.new(env) - path = env["PATH_INFO"] if env["PATH_INFO"] == "/callbacks" - uuid = env['QUERY_STRING'].split("=")[1] - response_for(uuid) - elsif env["PATH_INFO"] == "/base_time" - [200, {}, [""]] + uuid = env["QUERY_STRING"].split("=")[1] + handle_response_for_request(uuid) + elsif request.post? + handle_operation_request(env) else - params = JSON.parse(request.body.read, {symbolize_names: true}) - uuid = SecureRandom.uuid - future = application.new.async.route(uuid, path, params) - future.add_observer(:server_call_result, self) - [200, { "delay" => "20", "location" => "/callbacks?uuid=#{uuid}" }, []] + [404, {}, []] end end - def self.server_call_result(time, value, error) + def self.handle_operation_request(env) + request = Rack::Request.new(env) + params = begin + JSON.parse(request.body.read, { symbolize_names: true }) + rescue StandardError + {} + end + uuid = SecureRandom.uuid + future = application.new.async.route(uuid, request.path, params) + future.add_observer(:service_callback, self) + [200, { "delay" => Shatter::Config.initial_delay, "location" => "/callbacks?uuid=#{uuid}" }, []] + end + + def self.service_callback(_time, _value, error) return if error.nil? - Shatter.logger.error "#{ error }" + + Shatter.logger.error error.to_s end - def self.response_for(uuid) + def self.handle_response_for_request(uuid) response = application.new.response_for(uuid) return [200, {}, [response.to_json]] unless response.nil? - [200, { "delay" => "100", "location" => "/callbacks?uuid=#{uuid}" }, []] + [200, { "delay" => Shatter::Config.missing_result_delay, "location" => "/callbacks?uuid=#{uuid}" }, []] end end end -end \ No newline at end of file +end