From e0926038983177f5491e45cc338e5dc091e3a86d Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 21 Jun 2015 23:02:46 +0200 Subject: Wrap message queueing in a more welcoming API --- lib/action_cable/connection/base.rb | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/lib/action_cable/connection/base.rb b/lib/action_cable/connection/base.rb index 995b0901ca..71e84aed99 100644 --- a/lib/action_cable/connection/base.rb +++ b/lib/action_cable/connection/base.rb @@ -14,9 +14,6 @@ module ActionCable @server, @env = server, env - @accept_messages = false - @pending_messages = [] - @logger = TaggedLoggerProxy.new(server.logger, tags: log_tags) @heartbeat = ActionCable::Connection::Heartbeat.new(self) @@ -38,10 +35,10 @@ module ActionCable message = event.data if message.is_a?(String) - if @accept_messages + if accepting_messages? worker_pool.async.invoke(self, :receive, message) else - @pending_messages << message + queue_message message end else logger.error "Couldn't handle non-string message: #{message.class}" @@ -117,10 +114,29 @@ module ActionCable connect if respond_to?(:connect) subscribe_to_internal_channel + ready_to_accept_messages + process_pending_messages + end + + + def accepting_messages? + @accept_messages + end + + def ready_to_accept_messages @accept_messages = true + end + + def queue_message(message) + @pending_messages ||= [] + @pending_messages << message + end + + def process_pending_messages worker_pool.async.invoke(self, :receive, @pending_messages.shift) until @pending_messages.empty? end + def on_close server.remove_connection(self) -- cgit v1.2.3