r4s 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +6 -3
- data/lib/r4s.rb +18 -12
- data/lib/r4s/version.rb +1 -1
- metadata +2 -2
data/README.md
CHANGED
@@ -23,6 +23,9 @@ If you make a connection and then close the browser the srv will crash stating t
|
|
23
23
|
who, why, where or how these headers are sent are a mistery to me. My solution was to remove the turbolinks.
|
24
24
|
This might be fixed in the future.
|
25
25
|
|
26
|
+
You need to enable threads in your config and your server needs to
|
27
|
+
support threads.
|
28
|
+
|
26
29
|
## Installation
|
27
30
|
|
28
31
|
Add this line to your application's Gemfile:
|
@@ -45,7 +48,7 @@ R4S uses only two functions
|
|
45
48
|
|
46
49
|
One to create the stream(s)
|
47
50
|
|
48
|
-
R4S.add_stream(response,"key").start
|
51
|
+
R4S.add_stream(response,session,"key").start
|
49
52
|
|
50
53
|
One to push to the stream(s)
|
51
54
|
|
@@ -57,7 +60,7 @@ I created a "stream" controller to handle my streams
|
|
57
60
|
class StreamController < ApplicationController
|
58
61
|
include ActionController::Live
|
59
62
|
def stream1
|
60
|
-
R4S.add_stream(response,"stream.key").start
|
63
|
+
R4S.add_stream(response,session,"stream.key").start
|
61
64
|
end
|
62
65
|
end
|
63
66
|
|
@@ -80,7 +83,7 @@ Create a action that triggers the event.
|
|
80
83
|
|
81
84
|
class HomeController < ApplicationController
|
82
85
|
def index
|
83
|
-
R4S.push_data('
|
86
|
+
R4S.push_data('stream.key',{:time=>Time.now},:event=>"refresh")
|
84
87
|
render :json => {:success=>true}
|
85
88
|
end
|
86
89
|
|
data/lib/r4s.rb
CHANGED
@@ -1,22 +1,25 @@
|
|
1
1
|
require 'thread_safe'
|
2
2
|
require 'json'
|
3
|
-
|
3
|
+
module R4S
|
4
4
|
SSES = ThreadSafe::Hash.new
|
5
5
|
|
6
|
-
|
6
|
+
#The session_id is used to identify users who already have a connection
|
7
|
+
#The key is used to group "identical" sse-streams so you can push data to a group of streams
|
8
|
+
def self.add_stream(response,session,key="none")
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
id = session["session_id"]
|
11
|
+
|
12
|
+
R4S::SSES[key] = ThreadSafe::Hash.new unless R4S::SSES.keys.include?(key)
|
13
|
+
|
14
|
+
if R4S::SSES[key].keys.include?(id)
|
15
|
+
sse = R4S::SSES[key][id]
|
16
|
+
sse.close
|
13
17
|
end
|
14
18
|
|
15
|
-
sse = R4S::SSE.new(response,key,
|
16
|
-
R4S::SSES[key][
|
19
|
+
sse = R4S::SSE.new(response,key,id)
|
20
|
+
R4S::SSES[key][id] = sse
|
17
21
|
|
18
22
|
return sse
|
19
|
-
|
20
23
|
end
|
21
24
|
|
22
25
|
def self.push_data(key,data,options={})
|
@@ -51,8 +54,10 @@ class R4S
|
|
51
54
|
end
|
52
55
|
rescue
|
53
56
|
ensure
|
54
|
-
|
55
|
-
R4S::SSES[@key]
|
57
|
+
#it might have been reopened
|
58
|
+
unless !R4S::SSES[@key][@id].closed?
|
59
|
+
R4S::SSES[@key].delete(@id)
|
60
|
+
end
|
56
61
|
end
|
57
62
|
end
|
58
63
|
|
@@ -64,4 +69,5 @@ class R4S
|
|
64
69
|
@io.close
|
65
70
|
end
|
66
71
|
end
|
72
|
+
|
67
73
|
end
|
data/lib/r4s/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: r4s
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thread_safe
|