summaryrefslogtreecommitdiff
path: root/lib/nickserver/reel_server.rb
diff options
context:
space:
mode:
authorazul <azul@riseup.net>2016-07-12 10:39:58 +0200
committerGitHub <noreply@github.com>2016-07-12 10:39:58 +0200
commitd7599715c6d24534dcccbe29cfc058e534039053 (patch)
tree14824b08c4d0889e9767171ac5bafe3316a607f9 /lib/nickserver/reel_server.rb
parent27196b87e8d0ce5325381ea96ccd68ced8ee2e4d (diff)
parent6732fef4df156a02ed83f006f19f66cf567b5340 (diff)
Merge pull request #5 from azul/celluloid
Use Celluloid, Reel and Celluloid I/O based http requests
Diffstat (limited to 'lib/nickserver/reel_server.rb')
-rw-r--r--lib/nickserver/reel_server.rb47
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/nickserver/reel_server.rb b/lib/nickserver/reel_server.rb
new file mode 100644
index 0000000..6f05e0b
--- /dev/null
+++ b/lib/nickserver/reel_server.rb
@@ -0,0 +1,47 @@
+silence_warnings do
+ require 'reel'
+end
+require 'nickserver/adapters/celluloid_http'
+require 'nickserver/request_handler'
+
+module Nickserver
+ class ReelServer < Reel::Server::HTTP
+
+ def self.start(options = {})
+ new(options[:host], options[:port])
+ end
+
+ def initialize(host = "127.0.0.1", port = 3000)
+ super(host, port, &method(:on_connection))
+ end
+
+ def handle_connection(*args)
+ silence_warnings do
+ super
+ end
+ end
+
+ def on_connection(connection)
+ connection.each_request do |request|
+ handler = handler_for(request)
+ handler.respond_to params(request), request.headers
+ end
+ end
+
+
+ protected
+
+ def handler_for(request)
+ RequestHandler.new(request, Nickserver::Adapters::CelluloidHttp.new)
+ end
+
+ def params(request)
+ if request.query_string
+ CGI.parse request.query_string
+ else
+ CGI.parse request.body.to_s
+ end
+ end
+
+ end
+end