Class: Reel::WebSocket
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, socket) ⇒ WebSocket
Returns a new instance of WebSocket.
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/reel/websocket.rb', line 13
def initialize(info, socket)
@request_info = info
@socket = socket
handshake = ::WebSocket::ClientHandshake.new(:get, url, )
if handshake.valid?
response = handshake.accept_response
response.render(socket)
else
error = handshake.errors.first
response = Response.new(400)
response.reason = handshake.errors.first
response.render(@socket)
raise HandshakeError, "error during handshake: #{error}"
end
@parser = ::WebSocket::Parser.new
@parser.on_close do |status, reason|
@socket << ::WebSocket::Message.close.to_data
close
end
@parser.on_ping do |payload|
@socket << ::WebSocket::Message.pong(payload).to_data
end
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
#body ⇒ Object
75
76
77
|
# File 'lib/reel/websocket.rb', line 75
def body
nil
end
|
#cancel_timer! ⇒ Object
100
101
102
|
# File 'lib/reel/websocket.rb', line 100
def cancel_timer!
@timer && @timer.cancel
end
|
#close ⇒ Object
95
96
97
98
|
# File 'lib/reel/websocket.rb', line 95
def close
cancel_timer!
@socket.close unless closed?
end
|
#closed? ⇒ Boolean
91
92
93
|
# File 'lib/reel/websocket.rb', line 91
def closed?
@socket.closed?
end
|
#read ⇒ Object
67
68
69
70
71
72
73
|
# File 'lib/reel/websocket.rb', line 67
def read
@parser.append @socket.readpartial(Connection::BUFFER_SIZE) until msg = @parser.next_message
msg
rescue
cancel_timer!
raise
end
|
#read_every(n, unit = :s) ⇒ Object
Also known as:
read_interval, read_frequency
52
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/reel/websocket.rb', line 52
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:
<<
79
80
81
82
83
84
85
86
87
88
|
# File 'lib/reel/websocket.rb', line 79
def write(msg)
@socket << ::WebSocket::Message.new(msg).to_data
msg
rescue IOError, Errno::ECONNRESET, Errno::EPIPE
cancel_timer!
raise SocketError, "error writing to socket"
rescue
cancel_timer!
raise
end
|