Class: Celluloid::WebSocket
- Inherits:
-
Object
- Object
- Celluloid::WebSocket
show all
- Extended by:
- Forwardable
- Includes:
- IO
- Defined in:
- lib/celluloid/websocket.rb,
lib/celluloid/websocket/rack.rb,
lib/celluloid/websocket/version.rb
Defined Under Namespace
Classes: DriverEnvironment, MessageStream
Constant Summary
collapse
- VERSION =
"0.0.10"
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Instance Attribute Details
#env ⇒ Object
Returns the value of attribute env.
13
14
15
|
# File 'lib/celluloid/websocket.rb', line 13
def env
@env
end
|
#socket ⇒ Object
Returns the value of attribute socket.
13
14
15
|
# File 'lib/celluloid/websocket.rb', line 13
def socket
@socket
end
|
Class Method Details
.rack(*args) ⇒ Object
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
# File 'lib/celluloid/websocket/rack.rb', line 10
def self.rack(*args)
if defined?(PhusionPassenger)
PhusionPassenger.advertised_concurrency_level = 0
end
lambda do |env|
if env['HTTP_UPGRADE'].nil? || env['HTTP_UPGRADE'].downcase != 'websocket'
return [400, {}, "No Upgrade header or Upgrade not for websocket."]
end
env['rack.hijack'].call
socket = Celluloid::IO::RackSocket.new(env['rack.hijack_io'].to_io)
new(*args).async.initialize_websocket(env, socket)
[200,{},""]
end
end
|
Instance Method Details
#close ⇒ Object
59
60
61
62
|
# File 'lib/celluloid/websocket.rb', line 59
def close
@driver.close unless @driver.nil? rescue nil
@socket.close unless @socket.nil? || @socket.closed?
end
|
#closed? ⇒ Boolean
42
43
44
|
# File 'lib/celluloid/websocket.rb', line 42
def closed?
@socket.closed?
end
|
#initialize_websocket(env, socket) ⇒ Object
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# File 'lib/celluloid/websocket.rb', line 15
def initialize_websocket(env, socket)
@env = env
@socket = socket
driver_env = DriverEnvironment.new(env, socket)
@driver = ::WebSocket::Driver.rack(driver_env)
@driver.on(:close) do
@socket.close
end
@message_stream = MessageStream.new(socket, @driver)
@driver.start
on_open if respond_to? :on_open
rescue EOFError
close
rescue => e
on_error(e) if respond_to? :on_error
end
|
#read ⇒ Object
38
39
40
|
# File 'lib/celluloid/websocket.rb', line 38
def read
@message_stream.read
end
|
#shutdown ⇒ Object
64
65
66
|
# File 'lib/celluloid/websocket.rb', line 64
def shutdown
close
end
|
#write(msg) ⇒ Object
Also known as:
<<
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/celluloid/websocket.rb', line 46
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
raise SocketError, "error writing to socket"
end
|