diff --git a/lib/websocket/driver/draft75.rb b/lib/websocket/driver/draft75.rb index 041b725..cde8ae4 100644 --- a/lib/websocket/driver/draft75.rb +++ b/lib/websocket/driver/draft75.rb @@ -68,6 +68,8 @@ module WebSocket end end end + + reraise_emit_exception end def frame(buffer, type = nil, error_type = nil) diff --git a/lib/websocket/driver/event_emitter.rb b/lib/websocket/driver/event_emitter.rb index 52d69a3..0411083 100644 --- a/lib/websocket/driver/event_emitter.rb +++ b/lib/websocket/driver/event_emitter.rb @@ -38,6 +38,9 @@ module WebSocket @listeners[event.to_s].dup.each do |listener| listener.call(*args) end + + rescue => error + @emit_exception ||= error end def listener_count(event) @@ -48,6 +51,16 @@ module WebSocket def listeners(event) @listeners[event.to_s] end + + private + + def reraise_emit_exception + if @emit_exception + error = @emit_exception + @emit_exception = nil + raise error + end + end end end diff --git a/lib/websocket/driver/hybi.rb b/lib/websocket/driver/hybi.rb index 36d1905..dc0e8b0 100644 --- a/lib/websocket/driver/hybi.rb +++ b/lib/websocket/driver/hybi.rb @@ -127,6 +127,8 @@ module WebSocket buffer = nil end end + + reraise_emit_exception end def binary(message) diff --git a/lib/websocket/driver/native.rb b/lib/websocket/driver/native.rb index a634a0f..f49df8e 100644 --- a/lib/websocket/driver/native.rb +++ b/lib/websocket/driver/native.rb @@ -41,6 +41,7 @@ module WebSocket def parse(chunk) @parser.parse(chunk) + reraise_emit_exception end def binary(message)