diff options
author | Matthew Draper <matthew@trebex.net> | 2016-03-04 05:31:48 +1030 |
---|---|---|
committer | Matthew Draper <matthew@trebex.net> | 2016-03-04 05:31:48 +1030 |
commit | bbba0649f529626a076c4247047b60cfbe86d5e4 (patch) | |
tree | cdbf52c160399441574d1f13dd6587ee504e002d /actioncable/lib/action_cable/connection/faye_client_socket.rb | |
parent | cd73632d9d47752013f46e775e59241215cfd8e9 (diff) | |
parent | a373be9da45d4bee684ea03420212780ec1ef4b1 (diff) | |
download | rails-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.rb | 42 |
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 |