aboutsummaryrefslogtreecommitdiffstats
path: root/actioncable/lib/action_cable/connection/faye_client_socket.rb
diff options
context:
space:
mode:
authorMatthew Draper <matthew@trebex.net>2016-03-04 05:31:48 +1030
committerMatthew Draper <matthew@trebex.net>2016-03-04 05:31:48 +1030
commitbbba0649f529626a076c4247047b60cfbe86d5e4 (patch)
treecdbf52c160399441574d1f13dd6587ee504e002d /actioncable/lib/action_cable/connection/faye_client_socket.rb
parentcd73632d9d47752013f46e775e59241215cfd8e9 (diff)
parenta373be9da45d4bee684ea03420212780ec1ef4b1 (diff)
downloadrails-bbba0649f529626a076c4247047b60cfbe86d5e4.tar.gz
rails-bbba0649f529626a076c4247047b60cfbe86d5e4.tar.bz2
rails-bbba0649f529626a076c4247047b60cfbe86d5e4.zip
Merge pull request #23992 from matthewd/em-option
Support faye-websocket + EventMachine as an option
Diffstat (limited to 'actioncable/lib/action_cable/connection/faye_client_socket.rb')
-rw-r--r--actioncable/lib/action_cable/connection/faye_client_socket.rb42
1 files changed, 42 insertions, 0 deletions
diff --git a/actioncable/lib/action_cable/connection/faye_client_socket.rb b/actioncable/lib/action_cable/connection/faye_client_socket.rb
new file mode 100644
index 0000000000..c9139b6858
--- /dev/null
+++ b/actioncable/lib/action_cable/connection/faye_client_socket.rb
@@ -0,0 +1,42 @@
+require 'faye/websocket'
+
+module ActionCable
+ module Connection
+ class FayeClientSocket
+ def initialize(env, event_target, stream_event_loop)
+ @env = env
+ @event_target = event_target
+
+ @faye = nil
+ end
+
+ def alive?
+ @faye && @faye.ready_state == Faye::WebSocket::API::OPEN
+ end
+
+ def transmit(data)
+ connect
+ @faye.send data
+ end
+
+ def close
+ @faye && @faye.close
+ end
+
+ def rack_response
+ connect
+ @faye.rack_response
+ end
+
+ private
+ def connect
+ return if @faye
+ @faye = Faye::WebSocket.new(@env)
+
+ @faye.on(:open) { |event| @event_target.on_open }
+ @faye.on(:message) { |event| @event_target.on_message(event.data) }
+ @faye.on(:close) { |event| @event_target.on_close(event.reason, event.code) }
+ end
+ end
+ end
+end