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