celluloid-websocket 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +9 -4
- data/examples/message_counter.ru +2 -3
- data/lib/celluloid/websocket.rb +12 -3
- data/lib/celluloid/websocket/rack.rb +7 -21
- data/lib/celluloid/websocket/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a07647426e3725074e726481bfe0aff559c554f6
|
4
|
+
data.tar.gz: 7150f7bddb3bcf2273b57f902c8e7eb2768bb0f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c15d27a28211f17cfb91dd39aa97a408ef0cda3263bc7b7ef0560912a36a5c7c024ed49e2a1fbd4cf7c34bd7bb7126daf858b667734e794176d3006afad90238
|
7
|
+
data.tar.gz: 8ce021df180f45d42f18d4a3eede73dcdcfbad9af4a9e20067a5c43b4eb1c5efaebc6d75ec4e5d1aa738b52f30066c7a663fb7168dac05fee303cc71b4e21b0e
|
data/README.md
CHANGED
@@ -25,19 +25,24 @@ Simply inherit your Rack app from Celluloid::WebSocket::Rack, and implement the
|
|
25
25
|
```
|
26
26
|
require 'celluloid/websocket/rack'
|
27
27
|
|
28
|
-
class WebSocketEcho < Celluloid::WebSocket
|
28
|
+
class WebSocketEcho < Celluloid::WebSocket
|
29
29
|
def on_open
|
30
30
|
@counter = 0
|
31
|
-
|
32
31
|
while(true)
|
33
32
|
message = read
|
33
|
+
|
34
34
|
@counter += 1
|
35
|
-
write("#{@counter}: #{message}")
|
35
|
+
write("#{@counter}: #{message}")
|
36
36
|
end
|
37
37
|
end
|
38
|
+
|
39
|
+
def on_error(*args)
|
40
|
+
puts args.inspect
|
41
|
+
end
|
38
42
|
end
|
39
43
|
|
40
|
-
run
|
44
|
+
run WebSocketEcho.rack
|
45
|
+
|
41
46
|
```
|
42
47
|
|
43
48
|
You can try it out by cloning this repository running `bundle` and then:
|
data/examples/message_counter.ru
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
require 'celluloid/websocket/rack'
|
2
2
|
|
3
|
-
class WebSocketEcho < Celluloid::WebSocket
|
3
|
+
class WebSocketEcho < Celluloid::WebSocket
|
4
4
|
def on_open
|
5
5
|
@counter = 0
|
6
|
-
|
7
6
|
while(true)
|
8
7
|
message = read
|
9
8
|
|
@@ -17,4 +16,4 @@ class WebSocketEcho < Celluloid::WebSocket::Rack
|
|
17
16
|
end
|
18
17
|
end
|
19
18
|
|
20
|
-
run
|
19
|
+
run WebSocketEcho.rack
|
data/lib/celluloid/websocket.rb
CHANGED
@@ -6,10 +6,13 @@ require 'rack/request'
|
|
6
6
|
module Celluloid
|
7
7
|
class WebSocket
|
8
8
|
extend Forwardable
|
9
|
+
include Celluloid
|
10
|
+
|
11
|
+
finalizer :shutdown
|
9
12
|
|
10
13
|
attr_accessor :socket, :env
|
11
14
|
|
12
|
-
def
|
15
|
+
def initialize_websocket(env, socket)
|
13
16
|
@env = env
|
14
17
|
@socket = socket
|
15
18
|
|
@@ -24,6 +27,8 @@ module Celluloid
|
|
24
27
|
@message_stream = MessageStream.new(socket, @driver)
|
25
28
|
|
26
29
|
@driver.start
|
30
|
+
|
31
|
+
on_open if respond_to? :on_open
|
27
32
|
rescue EOFError
|
28
33
|
close
|
29
34
|
end
|
@@ -50,8 +55,12 @@ module Celluloid
|
|
50
55
|
alias_method :<<, :write
|
51
56
|
|
52
57
|
def close
|
53
|
-
@driver.close
|
54
|
-
@socket.close
|
58
|
+
@driver.close unless @driver.nil? || @driver.closed?
|
59
|
+
@socket.close unless @socket.nil? || @socket.closed?
|
60
|
+
end
|
61
|
+
|
62
|
+
def shutdown
|
63
|
+
close
|
55
64
|
end
|
56
65
|
|
57
66
|
private
|
@@ -7,36 +7,22 @@ require 'forwardable'
|
|
7
7
|
|
8
8
|
module Celluloid
|
9
9
|
class WebSocket
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
def self.rack(config={})
|
11
|
+
lambda do |env|
|
12
|
+
# We need to create the pool in the first request
|
13
|
+
# because we might've been forked before.
|
14
|
+
@pool ||= pool(config)
|
14
15
|
|
15
|
-
finalizer :shutdown
|
16
|
-
|
17
|
-
def_delegators :@websocket, :socket, :env, :addr, :peeraddr, :read, :read_every, :write, :<<, :closed?, :close, :cancel_timer!
|
18
|
-
|
19
|
-
def self.call(env)
|
20
16
|
if env['HTTP_UPGRADE'].nil? || env['HTTP_UPGRADE'].downcase != 'websocket'
|
21
17
|
return [400, {}, "No Upgrade header or Upgrade not for websocket."]
|
22
18
|
end
|
23
19
|
|
24
20
|
env['rack.hijack'].call
|
25
21
|
socket = Celluloid::IO::RackSocket.new(env['rack.hijack_io'].to_io)
|
26
|
-
|
27
|
-
|
28
|
-
actor.async.initialize_websocket(env, socket)
|
22
|
+
|
23
|
+
@pool.async.initialize_websocket(env, socket)
|
29
24
|
[200,{},""]
|
30
25
|
end
|
31
|
-
|
32
|
-
def initialize_websocket(req, socket)
|
33
|
-
@websocket = WebSocket.new(req, socket)
|
34
|
-
on_open if respond_to? :on_open
|
35
|
-
end
|
36
|
-
|
37
|
-
def shutdown
|
38
|
-
@websocket.close if @websocket
|
39
|
-
end
|
40
26
|
end
|
41
27
|
end
|
42
28
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: celluloid-websocket
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tinco Andringa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|