diff options
Diffstat (limited to 'lib/action_cable/connection/processor.rb')
-rw-r--r-- | lib/action_cable/connection/processor.rb | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/lib/action_cable/connection/processor.rb b/lib/action_cable/connection/processor.rb new file mode 100644 index 0000000000..2060392478 --- /dev/null +++ b/lib/action_cable/connection/processor.rb @@ -0,0 +1,54 @@ +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.worker_pool.async.invoke(connection, :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 |