aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2015-06-22 16:03:34 +0200
committerDavid Heinemeier Hansson <david@loudthinking.com>2015-06-22 16:03:34 +0200
commit24609f18f54938988035a97eb09ccfe309cf8710 (patch)
tree4868581942575d6eddfed897a984345c5f4af0ac /lib
parent09974941ccc7f782d163197d1a96440fcc811e85 (diff)
downloadrails-24609f18f54938988035a97eb09ccfe309cf8710.tar.gz
rails-24609f18f54938988035a97eb09ccfe309cf8710.tar.bz2
rails-24609f18f54938988035a97eb09ccfe309cf8710.zip
Rename Processor to MessageBuffer
Diffstat (limited to 'lib')
-rw-r--r--lib/action_cable/connection.rb2
-rw-r--r--lib/action_cable/connection/base.rb12
-rw-r--r--lib/action_cable/connection/message_buffer.rb51
-rw-r--r--lib/action_cable/connection/processor.rb54
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