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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d733c0d77a7b8675ae67ca19cd02d13ad663604c
4
- data.tar.gz: 2c99aa7d39b6ccb6f72e059d29ce29d0951fb5cf
3
+ metadata.gz: a07647426e3725074e726481bfe0aff559c554f6
4
+ data.tar.gz: 7150f7bddb3bcf2273b57f902c8e7eb2768bb0f2
5
5
  SHA512:
6
- metadata.gz: 043592123bc8623b6f52da908b31f80e9a2198cb7a78d30db0dee45e02b50be1a6362a62a8762ba56e66239ced5da513f076904e9bd673c7885eeb16bfe178d1
7
- data.tar.gz: 260e59ee216cde92225a1b05511cca21a0a1e72724e928d5acd94246dc5ff05accfc1231fdf3aed68f1d12ceae4958924b62712883aca06147b6efb6a6899bb8
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::Rack
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(WebSocketEcho)
44
+ run WebSocketEcho.rack
45
+
41
46
  ```
42
47
 
43
48
  You can try it out by cloning this repository running `bundle` and then:
@@ -1,9 +1,8 @@
1
1
  require 'celluloid/websocket/rack'
2
2
 
3
- class WebSocketEcho < Celluloid::WebSocket::Rack
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(WebSocketEcho)
19
+ run WebSocketEcho.rack
@@ -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 initialize(env, socket)
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
- class Rack
11
- extend Forwardable
12
- include Celluloid::IO
13
- include Celluloid::Logger
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
- actor = new()
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
@@ -1,5 +1,5 @@
1
1
  module Celluloid
2
2
  class WebSocket
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  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.2
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-12 00:00:00.000000000 Z
11
+ date: 2015-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler