lib/em-midori/server.rb in em-midori-0.1.1 vs lib/em-midori/server.rb in em-midori-0.1.2

- old
+ new

@@ -1,7 +1,7 @@ ## -# Logics to EventMachine TCP Server, running inside +EM::Connection+ +# Logic to EventMachine TCP Server, running inside +EM::Connection+ # @attr [Midori::Request] request # @attr [Class] api inherited from Midori::API # @attr [Midori::WebSocket] websocket websocket instance # @attr [Midori::EventSource] eventsource eventsource instance module Midori::Server @@ -15,11 +15,11 @@ @request = Midori::Request.new @websocket = Midori::WebSocket.new(self) @eventsource = Midori::EventSource.new(self) end - # Logics of receiving data + # Logic of receiving data # @param [String] data raw data def receive_data(data) lambda do async_internal(Fiber.new do start_time = Time.now @@ -35,31 +35,31 @@ @logger.info "#{@request.ip} - - \"#{@request.method} #{@request.path} HTTP/#{@request.protocol.join('.')}\" #{@response.status} #{(now_time.to_f - start_time.to_f).round(6)}".green end) end.call end - # Logics of receiving new request + # Logic of receiving new request # @param [String] data raw data def receive_new_request(data) begin @request.parse(data) @response = @api.receive(request, self) call_event(:open) if @request.websocket? - rescue Midori::Error::NotFound => _e - @response = Midori::Response.new(404, {}, '404 Not Found') + rescue Midori::Error::NotFound => e + @response = Midori::Sandbox.capture(e) rescue => e - @response = Midori::Response.new(500, {}, 'Internal Server Error') + @response = Midori::Sandbox.capture(e) @logger.error e.inspect.red @logger.warn e.backtrace.join("\n").yellow end unless @request.websocket? || @request.eventsource? send_data @response close_connection_after_writing end end - # Logics of receiving WebSocket request + # Logic of receiving WebSocket request # @param [StringIO] data raw data def websocket_request(data) @websocket.decode(data) case @websocket.opcode when 0x1, 0x2 @@ -74,10 +74,12 @@ call_event(:close) send_data "\b" # Opcode 0x8 close_connection_after_writing rescue Midori::Error::PingPongSizeTooLarge => e @logger.warn e.inspect.yellow - call_event(:error) # Neglect Too large ping request + call_event(:error) # Too large ping request + send_data "\b" # Opcode 0x8 + close_connection_after_writing rescue => e call_event(:error) @logger.error e.inspect.red @logger.warn e.backtrace.join("\n").yellow close_connection_after_writing