Class: Reel::WebSocket
Defined Under Namespace
Classes: DriverEnvironment, MessageStream
Instance Attribute Summary collapse
Instance Method Summary
collapse
#[], #fragment, #headers, #method, #path, #query_string, #uri, #url, #version
#remote_host, #remote_ip
Constructor Details
#initialize(info, connection) ⇒ WebSocket
Returns a new instance of WebSocket.
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/reel/websocket.rb', line 14
def initialize(info, connection)
driver_env = DriverEnvironment.new(info, connection.socket)
@socket = connection.hijack_socket
@request_info = info
@driver = ::WebSocket::Driver.rack(driver_env)
@driver.on(:close) do
@socket.close
end
@message_stream = MessageStream.new(@socket, @driver)
@driver.start
rescue EOFError
close
end
|
Instance Attribute Details
#socket ⇒ Object
Returns the value of attribute socket.
10
11
12
|
# File 'lib/reel/websocket.rb', line 10
def socket
@socket
end
|
Instance Method Details
#cancel_timer! ⇒ Object
88
89
90
|
# File 'lib/reel/websocket.rb', line 88
def cancel_timer!
@timer && @timer.cancel
end
|
#close ⇒ Object
83
84
85
86
|
# File 'lib/reel/websocket.rb', line 83
def close
@driver.close
@socket.close
end
|
#closed? ⇒ Boolean
62
63
64
|
# File 'lib/reel/websocket.rb', line 62
def closed?
@socket.closed?
end
|
#on_message(&block) ⇒ Object
31
32
33
34
35
|
# File 'lib/reel/websocket.rb', line 31
def on_message(&block)
@driver.on :message do |message|
block.(message.data)
end
end
|
#read ⇒ Object
58
59
60
|
# File 'lib/reel/websocket.rb', line 58
def read
@message_stream.read
end
|
#read_every(n, unit = :s) ⇒ Object
Also known as:
read_interval, read_frequency
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/reel/websocket.rb', line 43
def read_every(n, unit = :s)
cancel_timer! seconds = case unit.to_s
when /\Am/
n * 60
when /\Ah/
n * 3600
else
n
end
@timer = Celluloid.every(seconds) { read }
end
|
#write(msg) ⇒ Object
Also known as:
<<
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/reel/websocket.rb', line 66
def write(msg)
if msg.is_a? String
@driver.text(msg)
elsif msg.is_a? Array
@driver.binary(msg)
else
raise "Can only send byte array or string over driver."
end
rescue IOError, Errno::ECONNRESET, Errno::EPIPE
cancel_timer!
raise SocketError, "error writing to socket"
rescue
cancel_timer!
raise
end
|