web_socket.rb 956 字节
Newer Older
1
require "websocket/driver"
2

3 4
module ActionCable
  module Connection
5
    # Wrap the real socket to minimize the externally-presented API
T
T.J. Schuck 已提交
6
    class WebSocket # :nodoc:
7 8
      def initialize(env, event_target, event_loop, protocols: ActionCable::INTERNAL[:protocols])
        @websocket = ::WebSocket::Driver.websocket?(env) ? ClientSocket.new(env, event_target, event_loop, protocols) : nil
9 10 11 12 13 14 15
      end

      def possible?
        websocket
      end

      def alive?
16
        websocket && websocket.alive?
17 18 19
      end

      def transmit(data)
20 21 22 23 24 25 26
        websocket.transmit data
      end

      def close
        websocket.close
      end

D
Daniel Rhodes 已提交
27 28 29 30
      def protocol
        websocket.protocol
      end

31 32
      def rack_response
        websocket.rack_response
33 34
      end

A
Akira Matsuda 已提交
35 36
      # TODO Change this to private once we've dropped Ruby 2.2 support.
      # Workaround for Ruby 2.2 "private attribute?" warning.
A
Arun Agrawal 已提交
37
      protected
38 39 40 41
        attr_reader :websocket
    end
  end
end