colossus 0.9.0 → 0.10.0

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: 41f6b42502ef1d7dc7ac3f6c9db2fcda269ba638
4
- data.tar.gz: b2d287c2ae7064d7d44560807d624fc97eeb2507
3
+ metadata.gz: 744e97003be9b4ba97c54fd8877679f042268423
4
+ data.tar.gz: 831be7283ce1271cf95cb80ea751d62c4ab384e8
5
5
  SHA512:
6
- metadata.gz: b490b25cd109750c14adcf9dd0c372759906bc06c94a00a185aaf8339937a0f707b986b3c8d8895c3787e04e8c0359b051399d1549af917fc3e0e642c57e2461
7
- data.tar.gz: 9cfc3449c0f3258f91edd91263ce058381ee58ecf656720a3ae8dd57d27bc6fc54a35f49247f340b880a595fa55e6f94469380719cc819d06e4afcd65a654ef7
6
+ metadata.gz: 0db8010a14269f54288633e7701c6bae7a13a27cd087e8b024faedbc307717fbc185b2e051a653575cd5abfe17ef6a0bb0898e982a5ca9b8a8c1c465ca0df9e2
7
+ data.tar.gz: 287374b1f76f7b5891f4ebb5ea4a25c66c9cdb9df77d6db0231fe8369a70572238df3a3ab426b7877e019686ccae675e97b855950e4a84815d33afafa4854e85
@@ -8,6 +8,7 @@ class Colossus
8
8
 
9
9
  attr_reader :client_sessions, :ttl, :mutex
10
10
 
11
+ # @param [Integer/Float] ttl TTL in seconds
11
12
  def initialize(ttl)
12
13
  @client_sessions = Hash.new do |hash, key|
13
14
  hash[key] = Colossus::Engine::Memory::ClientSessionStore.new
@@ -30,7 +31,8 @@ class Colossus
30
31
  end
31
32
  end
32
33
 
33
- if client_sessions[user_id].status_changed?
34
+ if client_sessions[user_id].sessions.empty? ||
35
+ client_sessions[user_id].status_changed?
34
36
  status = client_sessions[user_id].status
35
37
  delete(user_id) if status == 'disconnected'
36
38
  user_changed(user_id, status)
@@ -76,23 +78,35 @@ class Colossus
76
78
 
77
79
  def new_periodic_ttl
78
80
  secs_ttl = Colossus.config.seconds_before_ttl_check
79
- @periodic_ttl = EM::Synchrony.add_periodic_timer(secs_ttl) do
80
- client_sessions.each_pair do |user_id, session_store|
81
- sessions_dupped = session_store.sessions.dup
82
-
83
- session_store.sessions.each_pair do |session_id, session|
84
- if (session.last_seen + ttl) < Time.now
85
- sessions_dupped.delete(session_id)
86
- end
87
- end
81
+ @periodic_ttl = EM::Synchrony.add_periodic_timer(secs_ttl, &method(:gc_ttl))
82
+ end
83
+
84
+ def gc_ttl
85
+ user_ids_to_delete = []
88
86
 
89
- mutex.synchronize { session_store.sessions = sessions_dupped }
87
+ client_sessions.each_pair do |user_id, session_store|
88
+ sessions_dupped = session_store.sessions.dup
90
89
 
91
- if (session_store.last_seen + ttl) < Time.now
92
- delete(user_id)
93
- user_changed(user_id, 'disconnected')
90
+ session_store.sessions.each_pair do |session_id, session|
91
+ if (session.last_seen + ttl) < Time.now
92
+ sessions_dupped.delete(session_id)
94
93
  end
95
94
  end
95
+
96
+ mutex.synchronize { session_store.sessions = sessions_dupped }
97
+
98
+ if (session_store.last_seen + ttl) < Time.now
99
+ user_ids_to_delete << user_id
100
+ end
101
+ end
102
+
103
+ delete_expired_users(user_ids_to_delete)
104
+ end
105
+
106
+ def delete_expired_users(user_ids)
107
+ user_ids.each do |user_id|
108
+ delete(user_id)
109
+ user_changed(user_id, 'disconnected')
96
110
  end
97
111
  end
98
112
  end
@@ -1,4 +1,4 @@
1
1
  # The Version
2
2
  class Colossus
3
- VERSION = '0.9.0'
3
+ VERSION = '0.10.0'
4
4
  end
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: colossus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - antoinelyset
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-04 00:00:00.000000000 Z
11
+ date: 2015-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faye
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: em-synchrony
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: faraday
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: faraday_middleware
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  description: Colossus is a Push and Presence pure Ruby server. It uses Faye internally.
@@ -93,17 +93,17 @@ require_paths:
93
93
  - lib
94
94
  required_ruby_version: !ruby/object:Gem::Requirement
95
95
  requirements:
96
- - - '>='
96
+ - - ">="
97
97
  - !ruby/object:Gem::Version
98
98
  version: '0'
99
99
  required_rubygems_version: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  requirements: []
105
105
  rubyforge_project:
106
- rubygems_version: 2.0.14
106
+ rubygems_version: 2.2.2
107
107
  signing_key:
108
108
  specification_version: 4
109
109
  summary: Colossus, Web Push & Presence made easy.