From b17a7e4c4daa4ab54223b0c5e2d03b491c070e0e Mon Sep 17 00:00:00 2001 From: Matthew Draper Date: Fri, 22 Jan 2016 11:13:51 +1030 Subject: Add Async and Inline adapters Just like their ActiveJob equivalents, these only work within the current process. --- .../lib/action_cable/subscription_adapter/async.rb | 22 ++++++++++++++++++++++ .../action_cable/subscription_adapter/inline.rb | 22 ++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 actioncable/lib/action_cable/subscription_adapter/async.rb create mode 100644 actioncable/lib/action_cable/subscription_adapter/inline.rb diff --git a/actioncable/lib/action_cable/subscription_adapter/async.rb b/actioncable/lib/action_cable/subscription_adapter/async.rb new file mode 100644 index 0000000000..85d4892e4c --- /dev/null +++ b/actioncable/lib/action_cable/subscription_adapter/async.rb @@ -0,0 +1,22 @@ +require 'action_cable/subscription_adapter/inline' + +module ActionCable + module SubscriptionAdapter + class Async < Inline # :nodoc: + private + def subscriber_map + @subscriber_map ||= AsyncSubscriberMap.new + end + + class AsyncSubscriberMap < SubscriberMap + def add_subscriber(*) + ::EM.next_tick { super } + end + + def invoke_callback(*) + ::EM.next_tick { super } + end + end + end + end +end diff --git a/actioncable/lib/action_cable/subscription_adapter/inline.rb b/actioncable/lib/action_cable/subscription_adapter/inline.rb new file mode 100644 index 0000000000..19747601be --- /dev/null +++ b/actioncable/lib/action_cable/subscription_adapter/inline.rb @@ -0,0 +1,22 @@ +module ActionCable + module SubscriptionAdapter + class Inline < Base # :nodoc: + def broadcast(channel, payload) + subscriber_map.broadcast(channel, payload) + end + + def subscribe(channel, callback, success_callback = nil) + subscriber_map.add_subscriber(channel, callback, success_callback) + end + + def unsubscribe(channel, callback) + subscriber_map.remove_subscriber(channel, callback) + end + + private + def subscriber_map + @subscriber_map ||= SubscriberMap.new + end + end + end +end -- cgit v1.2.3