diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2015-06-22 16:03:34 +0200 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2015-06-22 16:03:34 +0200 |
commit | 24609f18f54938988035a97eb09ccfe309cf8710 (patch) | |
tree | 4868581942575d6eddfed897a984345c5f4af0ac | |
parent | 09974941ccc7f782d163197d1a96440fcc811e85 (diff) | |
download | rails-24609f18f54938988035a97eb09ccfe309cf8710.tar.gz rails-24609f18f54938988035a97eb09ccfe309cf8710.tar.bz2 rails-24609f18f54938988035a97eb09ccfe309cf8710.zip |
Rename Processor to MessageBuffer
-rw-r--r-- | lib/action_cable/connection.rb | 2 | ||||
-rw-r--r-- | lib/action_cable/connection/base.rb | 12 | ||||
-rw-r--r-- | lib/action_cable/connection/message_buffer.rb | 51 | ||||
-rw-r--r-- | lib/action_cable/connection/processor.rb | 54 |
4 files changed, 58 insertions, 61 deletions
diff --git a/lib/action_cable/connection.rb b/lib/action_cable/connection.rb index 5928a47949..09ef1699a6 100644 --- a/lib/action_cable/connection.rb +++ b/lib/action_cable/connection.rb @@ -4,7 +4,7 @@ module ActionCable autoload :Heartbeat, 'action_cable/connection/heartbeat' autoload :Identification, 'action_cable/connection/identification' autoload :InternalChannel, 'action_cable/connection/internal_channel' - autoload :Processor, 'action_cable/connection/processor' + autoload :MessageBuffer, 'action_cable/connection/message_buffer' autoload :Subscriptions, 'action_cable/connection/subscriptions' autoload :TaggedLoggerProxy, 'action_cable/connection/tagged_logger_proxy' end diff --git a/lib/action_cable/connection/base.rb b/lib/action_cable/connection/base.rb index 4bc6a14aaa..da1fe380e2 100644 --- a/lib/action_cable/connection/base.rb +++ b/lib/action_cable/connection/base.rb @@ -16,9 +16,9 @@ module ActionCable @logger = TaggedLoggerProxy.new(server.logger, tags: log_tags) - @heartbeat = ActionCable::Connection::Heartbeat.new(self) - @subscriptions = ActionCable::Connection::Subscriptions.new(self) - @processor = ActionCable::Connection::Processor.new(self) + @heartbeat = ActionCable::Connection::Heartbeat.new(self) + @subscriptions = ActionCable::Connection::Subscriptions.new(self) + @message_buffer = ActionCable::Connection::MessageBuffer.new(self) end def process @@ -33,7 +33,7 @@ module ActionCable end @websocket.on(:message) do |event| - processor.handle event.data + message_buffer.append event.data end @websocket.on(:close) do |event| @@ -101,7 +101,7 @@ module ActionCable private - attr_reader :heartbeat, :subscriptions, :processor + attr_reader :heartbeat, :subscriptions, :message_buffer def on_open server.add_connection(self) @@ -109,7 +109,7 @@ module ActionCable connect if respond_to?(:connect) subscribe_to_internal_channel - processor.ready! + message_buffer.process! end diff --git a/lib/action_cable/connection/message_buffer.rb b/lib/action_cable/connection/message_buffer.rb new file mode 100644 index 0000000000..615266e0cb --- /dev/null +++ b/lib/action_cable/connection/message_buffer.rb @@ -0,0 +1,51 @@ +module ActionCable + module Connection + class MessageBuffer + def initialize(connection) + @connection = connection + @buffered_messages = [] + end + + def append(message) + if valid? message + if processing? + receive message + else + buffer message + end + else + connection.logger.error "Couldn't handle non-string message: #{message.class}" + end + end + + def processing? + @processing + end + + def process! + @processing = true + receive_buffered_messages + end + + private + attr_reader :connection + attr_accessor :buffered_messages + + def valid?(message) + message.is_a?(String) + end + + def receive(message) + connection.send_async :receive, message + end + + def buffer(message) + buffered_messages << message + end + + def receive_buffered_messages + receive buffered_messages.shift until buffered_messages.empty? + end + end + end +end
\ No newline at end of file diff --git a/lib/action_cable/connection/processor.rb b/lib/action_cable/connection/processor.rb deleted file mode 100644 index 3191be4a4c..0000000000 --- a/lib/action_cable/connection/processor.rb +++ /dev/null @@ -1,54 +0,0 @@ -module ActionCable - module Connection - class Processor - def initialize(connection) - @connection = connection - @pending_messages = [] - end - - def handle(message) - if valid? message - if ready? - process message - else - queue message - end - end - end - - def ready? - @ready - end - - def ready! - @ready = true - handle_pending_messages - end - - private - attr_reader :connection - attr_accessor :pending_messages - - def process(message) - connection.send_async :receive, message - end - - def queue(message) - pending_messages << message - end - - def valid?(message) - if message.is_a?(String) - true - else - connection.logger.error "Couldn't handle non-string message: #{message.class}" - false - end - end - - def handle_pending_messages - process pending_messages.shift until pending_messages.empty? - end - end - end -end
\ No newline at end of file |