celluloid-websocket 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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