Class: LiteCable::Server::ClientSocket::Base
- Inherits:
-
Object
- Object
- LiteCable::Server::ClientSocket::Base
show all
- Includes:
- Logging, Subscriptions
- Defined in:
- lib/lite_cable/server/client_socket/base.rb
Overview
Wrapper over web socket rubocop:disable Metrics/ClassLength
Constant Summary
Constants included
from Logging
Logging::PREFIX
Instance Attribute Summary collapse
Instance Method Summary
collapse
#subscribe, #unsubscribe, #unsubscribe_from_all
Methods included from Logging
logger
Constructor Details
#initialize(env, socket, version) ⇒ Base
Returns a new instance of Base.
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
# File 'lib/lite_cable/server/client_socket/base.rb', line 13
def initialize(env, socket, version)
log(:debug, "WebSocket version #{version}")
@env = env
@socket = socket
@version = version
@active = true
@open_handlers = []
@message_handlers = []
@close_handlers = []
@error_handlers = []
@close_on_error = true
end
|
Instance Attribute Details
#active ⇒ Object
Returns the value of attribute active.
11
12
13
|
# File 'lib/lite_cable/server/client_socket/base.rb', line 11
def active
@active
end
|
#version ⇒ Object
Returns the value of attribute version.
11
12
13
|
# File 'lib/lite_cable/server/client_socket/base.rb', line 11
def version
@version
end
|
Instance Method Details
#close ⇒ Object
87
88
89
90
91
92
93
94
|
# File 'lib/lite_cable/server/client_socket/base.rb', line 87
def close
return unless @active
@close_handlers.each(&:call)
close!
@active = false
end
|
#closed? ⇒ Boolean
96
97
98
|
# File 'lib/lite_cable/server/client_socket/base.rb', line 96
def closed?
@socket.closed?
end
|
#listen ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/lite_cable/server/client_socket/base.rb', line 64
def listen
keepalive
Thread.new do
Thread.current.abort_on_exception = true
begin
@open_handlers.each(&:call)
each_frame do |data|
@message_handlers.each do |h|
begin
h.call(data)
rescue => e
log(:error, "Socket receive failed: #{e}")
@error_handlers.each { |eh| eh.call(e, data) }
close if close_on_error
end
end
end
ensure
close
end
end
end
|
#onclose(&block) ⇒ Object
56
57
58
|
# File 'lib/lite_cable/server/client_socket/base.rb', line 56
def onclose(&block)
@close_handlers << block
end
|
#onerror(&block) ⇒ Object
60
61
62
|
# File 'lib/lite_cable/server/client_socket/base.rb', line 60
def onerror(&block)
@error_handlers << block
end
|
#onmessage(&block) ⇒ Object
52
53
54
|
# File 'lib/lite_cable/server/client_socket/base.rb', line 52
def onmessage(&block)
@message_handlers << block
end
|
#onopen(&block) ⇒ Object
48
49
50
|
# File 'lib/lite_cable/server/client_socket/base.rb', line 48
def onopen(&block)
@open_handlers << block
end
|
#prevent_close_on_error ⇒ Object
28
29
30
|
# File 'lib/lite_cable/server/client_socket/base.rb', line 28
def prevent_close_on_error
@close_on_error = false
end
|
#request ⇒ Object
44
45
46
|
# File 'lib/lite_cable/server/client_socket/base.rb', line 44
def request
@request ||= Rack::Request.new(@env)
end
|
#transmit(data, type: :text) ⇒ Object
32
33
34
35
36
37
38
39
40
41
42
|
# File 'lib/lite_cable/server/client_socket/base.rb', line 32
def transmit(data, type: :text)
frame = WebSocket::Frame::Outgoing::Server.new(
version: version,
data: data,
type: type
)
socket.write frame.to_s
rescue IOError, Errno::EPIPE, Errno::ETIMEDOUT => e
log(:error, "Socket send failed: #{e}")
close
end
|