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