macournoyer / mor7
- Source
- Commits
- Network (0)
- Issues (0)
- Downloads (0)
- Wiki (1)
- Graphs
-
Tree:
44971dd
mor7 / demo.rb
| ef4721aa » | macournoyer | 2008-02-20 | 1 | %w(rubygems eventmachine thin thin_parser rack rack/lobster).each { |f| require f } | |
| 2 | |||||
| 3 | class Connection < EventMachine::Connection | ||||
| 4 | attr_accessor :app | ||||
| 5 | |||||
| 6 | def initialize | ||||
| 7 | @parser = Thin::HttpParser.new | ||||
| 8 | @data = '' | ||||
| 9 | @nparsed = 0 | ||||
| 10 | @env = {} | ||||
| 11 | end | ||||
| 12 | |||||
| 13 | def receive_data(data) | ||||
| 14 | @data << data | ||||
| 15 | @nparsed = @parser.execute(@env, @data, @nparsed) | ||||
| 16 | |||||
| 17 | process if @parser.finished? | ||||
| 18 | end | ||||
| 19 | |||||
| 20 | def process | ||||
| 21 | status, headers, body = @app.call(@env) | ||||
| 22 | |||||
| 23 | body_output = '' | ||||
| 24 | body.each { |l| body_output << l } | ||||
| 25 | |||||
| 26 | send_data "HTTP/1.1 #{status} OK\r\n" + | ||||
| 27 | headers.inject('') { |h, (k,v)| h += "#k: #v\r\n" } + | ||||
| 28 | "\r\n" + | ||||
| 29 | body_output | ||||
| 30 | |||||
| 31 | close_connection_after_writing | ||||
| 32 | end | ||||
| 33 | end | ||||
| 34 | |||||
| 35 | welcome_app = proc do |env| | ||||
| 36 | [ | ||||
| 37 | 200, # Status | ||||
| 38 | {'Content-Type' => 'text/html'}, # Headers | ||||
| 39 | [ | ||||
| 40 | '<html><body>', | ||||
| 41 | '<h1>Welcome</h1>', | ||||
| 42 | '<p>Welcome to my server!</p>', # Body | ||||
| 43 | '<p><a href="/rails">My Rails app!</a></p>', | ||||
| 44 | '</body></html>' | ||||
| 45 | ] | ||||
| 46 | ] | ||||
| 47 | end | ||||
| 48 | |||||
| 49 | rails_app = Rack::Adapter::Rails.new(:root => '/Users/marc/projects/refactormycode', :prefix => '/rails') | ||||
| 50 | |||||
| 51 | app = Rack::URLMap.new('/' => welcome_app, '/rails' => rails_app) | ||||
| 52 | |||||
| 53 | EventMachine.run do | ||||
| 54 | EventMachine.start_server '0.0.0.0', 3000, Connection do |con| | ||||
| 55 | con.app = app | ||||
| 56 | end | ||||
| 57 | end | ||||
