Class: Pincerna::Server
- Inherits:
-
Goliath::API
- Object
- Goliath::API
- Pincerna::Server
- Defined in:
- lib/pincerna/server.rb
Overview
Main HTTP server to handle requests.
Constant Summary
- DELAY =
Delay before responding to a request.
0.05
Class Method Summary (collapse)
-
+ (Object) enqueue_request
Enqueues a request.
-
+ (Boolean) perform_request?
Enqueues a request.
Instance Method Summary (collapse)
-
- (Array) handle_request(type, args)
Handles a valid request.
-
- (Array) handle_stop
Schedule the server’s stop.
-
- (Array) response(env)
Send a response to a request.
Class Method Details
+ (Object) enqueue_request
Enqueues a request.
19 20 21 22 23 |
# File 'lib/pincerna/server.rb', line 19 def self.enqueue_request @requests ||= Queue.new @requests << Time.now.to_f EM::Synchrony.sleep(DELAY) end |
+ (Boolean) perform_request?
Enqueues a request.
28 29 30 31 |
# File 'lib/pincerna/server.rb', line 28 def self.perform_request? @requests.pop @requests.empty? end |
Instance Method Details
- (Array) handle_request(type, args)
Handles a valid request.
38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/pincerna/server.rb', line 38 def handle_request(type, args) # Enqueue the request. This will wait to avoid too many requests. Server.enqueue_request # Execute the request, if none were added. response = Server.perform_request? ? Pincerna::Base.execute!(type, (args["q"] || "").strip, args["format"], args["debug"]) : false if response then [200, {"Content-Type" => response.format_content_type}, response.output] else [response.nil? ? 404 : 429, {"Content-Type" => "text/plain"}, ""] end end |
- (Array) handle_stop
Schedule the server’s stop.
54 55 56 57 |
# File 'lib/pincerna/server.rb', line 54 def handle_stop EM.add_timer(0.1) { stop_server } [200, {}, ""] end |
- (Array) response(env)
Send a response to a request.
63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/pincerna/server.rb', line 63 def response(env) begin type = env["REQUEST_PATH"].gsub(/\//, "") case type when "quit" then handle_stop when "install" then handle_install when "uninstall" then handle_uninstall else handle_request(type, params) end rescue => e [500, {"X-Error" => e.class.to_s, "X-Error-Message" => e., "Content-Type" => "text/plain"}, e.backtrace.join("\n")] end end |