em-breakout 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/em-breakout.gemspec CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
16
16
 
17
17
  s.add_dependency 'json', '>=1.4.6'
18
18
  s.add_dependency 'em-websocket', '>=0.2.1'
19
- s.add_dependency 'breakout', '0.0.1'
19
+ s.add_dependency 'breakout', '>=0.0.2'
20
20
 
21
21
  s.files = `git ls-files`.split("\n")
22
22
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -17,3 +17,16 @@ Feature: notify
17
17
  Then worker 1's payload route should be "test"
18
18
  Then worker 1's payload bid should be "1"
19
19
  Then worker 1's payload message should be "/close"
20
+
21
+ Scenario: bid freed after notify
22
+ Given worker 1 opens a url for work
23
+ When browser 1 opens a url with bid "foo" and notify
24
+ And worker 1 receives a payload
25
+ And browser 1 disconnects
26
+ And browser 2 opens a url with bid "foo"
27
+ Then browser 2 should not be connected
28
+ When worker 1 sends done_work
29
+ And worker 1 receives a payload
30
+ And worker 1 sends done_work
31
+ When browser 2 opens a url with bid "foo"
32
+ Then browser 2 should be connected
@@ -18,6 +18,13 @@ Feature: security
18
18
  And browser 2 should be disconnected
19
19
  And browser 1 should be connected
20
20
 
21
+ Scenario: bid freed after use
22
+ Given worker 1 opens a url
23
+ When browser 1 opens a url with bid "foo"
24
+ And browser 1 disconnects
25
+ And browser 2 opens a url with bid "foo"
26
+ Then browser 2 should be connected
27
+
21
28
  Scenario: expired link
22
29
  Given worker 1 opens a url
23
30
  When browser 1 opens an expired url
@@ -14,6 +14,10 @@ When /^browser (\d+) opens a url with notify$/ do |id|
14
14
  @browser_by_id[id] = Breakout::Socket.new(Breakout.browser_url("test", :bid => id, :notify => true))
15
15
  end
16
16
 
17
+ When /^browser (\d+) opens a url with bid "([^"]*)" and notify$/ do |id, bid|
18
+ @browser_by_id[id] = Breakout::Socket.new(Breakout.browser_url("test", :bid => bid, :notify => true))
19
+ end
20
+
17
21
  When /^worker (\d+) opens a url for work$/ do |id|
18
22
  @worker_by_id[id] = Breakout::Socket.new(Breakout.worker_url)
19
23
  @worker_by_id[id].send :done_work => true
@@ -103,10 +107,12 @@ end
103
107
 
104
108
  When /^browser (\d+) disconnects$/ do |id|
105
109
  @browser_by_id[id].close
110
+ sleep(0.01)
106
111
  end
107
112
 
108
113
  When /^worker (\d+) disconnects$/ do |id|
109
114
  @worker_by_id[id].close
115
+ sleep(0.01)
110
116
  end
111
117
 
112
118
  Then /^browser (\d+) should be disconnected$/ do |id|
@@ -153,3 +159,7 @@ end
153
159
  Given /^the server is restarted$/ do
154
160
  restart_server
155
161
  end
162
+
163
+ When /^there is a pause$/ do
164
+ sleep(0.1)
165
+ end
@@ -28,7 +28,7 @@ module EventMachine
28
28
  throw :break
29
29
  end
30
30
 
31
- if @grid.browsers.has_key?(@bid)
31
+ if @grid.browsers.has_key?(@bid) or @grid.disconnected_browsers.has_key?(@bid)
32
32
  close_websocket "bid in use"
33
33
  throw :break
34
34
  end
@@ -71,6 +71,7 @@ module EventMachine
71
71
  log("closing") if debug
72
72
 
73
73
  if @message_queue
74
+ @grid.browsers.delete @bid
74
75
 
75
76
  if @notify
76
77
  @grid.disconnected_browsers[@bid] = self
@@ -1,5 +1,5 @@
1
1
  module EventMachine
2
2
  module Breakout
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,61 +1,57 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: em-breakout
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
4
5
  prerelease:
5
- version: 0.0.3
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Steve Masterman
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-05-02 00:00:00 -04:00
12
+ date: 2011-05-02 00:00:00.000000000 -04:00
14
13
  default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
17
16
  name: json
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: &70737630 !ruby/object:Gem::Requirement
20
18
  none: false
21
- requirements:
22
- - - ">="
23
- - !ruby/object:Gem::Version
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
24
22
  version: 1.4.6
25
23
  type: :runtime
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: em-websocket
29
24
  prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: *70737630
26
+ - !ruby/object:Gem::Dependency
27
+ name: em-websocket
28
+ requirement: &70737370 !ruby/object:Gem::Requirement
31
29
  none: false
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
35
33
  version: 0.2.1
36
34
  type: :runtime
37
- version_requirements: *id002
38
- - !ruby/object:Gem::Dependency
39
- name: breakout
40
35
  prerelease: false
41
- requirement: &id003 !ruby/object:Gem::Requirement
36
+ version_requirements: *70737370
37
+ - !ruby/object:Gem::Dependency
38
+ name: breakout
39
+ requirement: &70737140 !ruby/object:Gem::Requirement
42
40
  none: false
43
- requirements:
44
- - - "="
45
- - !ruby/object:Gem::Version
46
- version: 0.0.1
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: 0.0.2
47
45
  type: :runtime
48
- version_requirements: *id003
46
+ prerelease: false
47
+ version_requirements: *70737140
49
48
  description: Breakout routes messages among web browsers and workers using WebSockets.
50
- email:
49
+ email:
51
50
  - steve@vermonster.com
52
51
  executables: []
53
-
54
52
  extensions: []
55
-
56
53
  extra_rdoc_files: []
57
-
58
- files:
54
+ files:
59
55
  - .gitignore
60
56
  - Gemfile
61
57
  - README.md
@@ -87,43 +83,26 @@ files:
87
83
  has_rdoc: true
88
84
  homepage: https://github.com/steve9001/em-breakout
89
85
  licenses: []
90
-
91
86
  post_install_message:
92
87
  rdoc_options: []
93
-
94
- require_paths:
88
+ require_paths:
95
89
  - lib
96
- required_ruby_version: !ruby/object:Gem::Requirement
90
+ required_ruby_version: !ruby/object:Gem::Requirement
97
91
  none: false
98
- requirements:
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- version: "0"
102
- required_rubygems_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
97
  none: false
104
- requirements:
105
- - - ">="
106
- - !ruby/object:Gem::Version
107
- version: "0"
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
108
102
  requirements: []
109
-
110
103
  rubyforge_project: em-breakout
111
104
  rubygems_version: 1.6.2
112
105
  signing_key:
113
106
  specification_version: 3
114
107
  summary: Breakout routes messages among web browsers and workers using WebSockets.
115
- test_files:
116
- - features/api.feature
117
- - features/api_format.feature
118
- - features/connect.feature
119
- - features/notify.feature
120
- - features/performance.feature
121
- - features/ping.feature
122
- - features/security.feature
123
- - features/serialize.feature
124
- - features/step_definitions/common_steps.rb
125
- - features/step_definitions/performance_steps.rb
126
- - features/support/em_control
127
- - features/support/env.rb
128
- - features/support/server.rb
129
- - features/support/socket.rb
108
+ test_files: []