firehose 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,8 +15,7 @@ class Firehose.LongPoll extends Firehose.Transport
15
15
  # Protocol schema we should use for talking to WS server.
16
16
  @config.longPoll.url ||= "http:#{@config.uri}"
17
17
  # How many ms should we wait before timing out the AJAX connection?
18
- # TODO why was this set at 0s?
19
- @config.longPoll.timeout ||= 0
18
+ @config.longPoll.timeout ||= 20000
20
19
 
21
20
  # TODO - What is @_lagTime for? Can't we just use the @_timeout value?
22
21
  # We use the lag time to make the client live longer than the server.
data/lib/firehose/rack.rb CHANGED
@@ -11,10 +11,12 @@ module Firehose
11
11
  path = req.path
12
12
  method = req.request_method
13
13
  timeout = 30
14
+ cors_origin = env['HTTP_ORIGIN']
14
15
  cors_headers = {
15
- 'Access-Control-Allow-Origin' => env['HTTP_ORIGIN'],
16
+ 'Access-Control-Allow-Origin' => cors_origin,
16
17
  'Access-Control-Allow-Methods' => 'GET',
17
- 'Access-Control-Max-Age' => '1728000'
18
+ 'Access-Control-Max-Age' => '1728000',
19
+ 'Access-Control-Allow-Headers' => 'Content-Type, User-Agent, If-Modified-Since, Cache-Control'
18
20
  }
19
21
 
20
22
  case method
@@ -22,23 +24,26 @@ module Firehose
22
24
  # close down the requeust, and the client then reconnects.
23
25
  when 'GET'
24
26
  EM.next_tick do
27
+ # If the request is a CORS request, return those headers, otherwise don't worry 'bout it
28
+ response_headers = cors_origin ? cors_headers : {}
29
+
25
30
  # Setup a subscription with a client id. We haven't subscribed yet here.
26
31
  subscription = Firehose::Subscription.new(cid)
27
32
 
28
33
  # Setup a timeout timer to tell clients that time out that everything is OK
29
34
  # and they should come back for more
30
- timer = EM.add_timer(timeout) do
35
+ timer = EventMachine::Timer.new(timeout) do
31
36
  # We send a 204 OK to tell the client to reconnect.
32
- env['async.callback'].call [204, cors_headers, []]
37
+ env['async.callback'].call [204, response_headers, []]
33
38
  Firehose.logger.debug "HTTP wait `#{cid}@#{path}` timed out"
34
39
  end
35
40
 
36
41
  # Ok, now subscribe to the subscription.
37
42
  subscription.subscribe path do |message|
43
+ timer.cancel # Turn off the heart beat so we don't execute any of that business.
38
44
  subscription.unsubscribe
39
45
  subscription = nil # Set this to nil so that our heart beat timer doesn't try to double unsub.
40
- EM.cancel_timer timer # Turn off the heart beat so we don't execute any of that business.
41
- env['async.callback'].call [200, cors_headers, [message]]
46
+ env['async.callback'].call [200, response_headers, [message]]
42
47
  Firehose.logger.debug "HTTP sent `#{message}` to `#{cid}@#{path}`"
43
48
  end
44
49
  Firehose.logger.debug "HTTP subscribed to `#{cid}@#{path}`"
@@ -1,4 +1,4 @@
1
1
  module Firehose
2
- VERSION = "0.0.11"
2
+ VERSION = "0.0.12"
3
3
  CODENAME = "Shouty Shamous"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: firehose
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ date: 2012-04-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: eventmachine
17
- requirement: &70308648263700 !ruby/object:Gem::Requirement
17
+ requirement: &70182613622860 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 1.0.0.beta
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70308648263700
25
+ version_requirements: *70182613622860
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: amqp
28
- requirement: &70308648262880 !ruby/object:Gem::Requirement
28
+ requirement: &70182613621920 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 0.9.4
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *70308648262880
36
+ version_requirements: *70182613621920
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: thin
39
- requirement: &70308648261900 !ruby/object:Gem::Requirement
39
+ requirement: &70182613620960 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *70308648261900
47
+ version_requirements: *70182613620960
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: thor
50
- requirement: &70308648260860 !ruby/object:Gem::Requirement
50
+ requirement: &70182613619960 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *70308648260860
58
+ version_requirements: *70182613619960
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: websocket-rack
61
- requirement: &70308648260100 !ruby/object:Gem::Requirement
61
+ requirement: &70182613619120 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *70308648260100
69
+ version_requirements: *70182613619120
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: faraday
72
- requirement: &70308648258940 !ruby/object:Gem::Requirement
72
+ requirement: &70182613617780 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '0'
78
78
  type: :runtime
79
79
  prerelease: false
80
- version_requirements: *70308648258940
80
+ version_requirements: *70182613617780
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: rspec
83
- requirement: &70308648258020 !ruby/object:Gem::Requirement
83
+ requirement: &70182613617160 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: '0'
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *70308648258020
91
+ version_requirements: *70182613617160
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: rack-test
94
- requirement: &70308648257080 !ruby/object:Gem::Requirement
94
+ requirement: &70182613615900 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *70308648257080
102
+ version_requirements: *70182613615900
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: guard-rspec
105
- requirement: &70308648271320 !ruby/object:Gem::Requirement
105
+ requirement: &70182613629800 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: '0'
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *70308648271320
113
+ version_requirements: *70182613629800
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: guard-bundler
116
- requirement: &70308648267980 !ruby/object:Gem::Requirement
116
+ requirement: &70182613627180 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ! '>='
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: '0'
122
122
  type: :development
123
123
  prerelease: false
124
- version_requirements: *70308648267980
124
+ version_requirements: *70182613627180
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: em-http-request
127
- requirement: &70308648266640 !ruby/object:Gem::Requirement
127
+ requirement: &70182613625900 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ~>
@@ -132,10 +132,10 @@ dependencies:
132
132
  version: 0.3.0
133
133
  type: :development
134
134
  prerelease: false
135
- version_requirements: *70308648266640
135
+ version_requirements: *70182613625900
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: guard-coffeescript
138
- requirement: &70308648265120 !ruby/object:Gem::Requirement
138
+ requirement: &70182613624400 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - ! '>='
@@ -143,7 +143,7 @@ dependencies:
143
143
  version: '0'
144
144
  type: :development
145
145
  prerelease: false
146
- version_requirements: *70308648265120
146
+ version_requirements: *70182613624400
147
147
  description: Firehose is a realtime web application toolkit for building realtime
148
148
  Ruby web applications.
149
149
  email: