pokan 0.1.0rc2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,35 @@
1
+ # rdoc generated
2
+ rdoc
3
+
4
+ # yard generated
5
+ doc
6
+ .yardoc
7
+
8
+ # bundler
9
+ .bundle
10
+
11
+ # RVM
12
+ .rvmrc
13
+
14
+ # jeweler generated
15
+ pkg
16
+
17
+ .DS_Store
18
+
19
+ *.tmproj
20
+ tmtags
21
+
22
+ *~
23
+ \#*
24
+ .\#*
25
+
26
+ *.swp
27
+ tags
28
+
29
+ tmp
30
+
31
+ .redcar
32
+
33
+ *.rbc
34
+
35
+ dump.rdb
@@ -40,7 +40,7 @@ module Pokan
40
40
 
41
41
  include ServerMessages
42
42
 
43
- ON_EVENTS = [:new_key, :key_changed, :key_removed]
43
+ ON_EVENTS = [:new_key, :key_changed, :key_removed, :start, :shutdown]
44
44
  BEFORE_EVENTS = [:gossip, :sync]
45
45
  AFTER_EVENTS = [:gossip, :sync]
46
46
 
@@ -156,6 +156,7 @@ module Pokan
156
156
  else
157
157
  @seed_address, @seed_port = parse_host_and_port(seed)
158
158
  say_hello(@seed_address, @seed_port)
159
+ build_trap
159
160
 
160
161
  sync_with(@seed_address, options[:redis])
161
162
  @event_handler.emit :after_sync
@@ -202,15 +203,33 @@ module Pokan
202
203
  RequestHandler.address = address
203
204
  RequestHandler.port = udp_port
204
205
 
206
+ @event_handler.emit :start, :with => [@address, @tcp_port, @udp_port, @epoll,
207
+ @gossip_interval, @seed_address, @seed_port]
208
+
205
209
  EventMachine.open_datagram_socket address, udp_port, RequestHandler
206
210
  EventMachine.start_server address, tcp_port, RequestHandler
207
211
  }
208
212
  end
209
213
 
214
+ def make_trap
215
+ trap('INT') { prepare_to_die }
216
+ trap('TERM') { prepare_to_die }
217
+ trap('QUIT') { prepare_to_die }
218
+ end
219
+
210
220
  def say_hello(address, port)
211
221
  Network.tcp(hello_message, address, port)
212
222
  end
213
223
 
224
+ def prepare_to_die
225
+ say_goodbye(@seed_address, @seed_port)
226
+ @event_handler.emit :shutdown
227
+ end
228
+
229
+ def say_goodbye(address, port)
230
+ Network.tcp(goodbye_message, address, port)
231
+ end
232
+
214
233
  def gossip
215
234
  EventMachine.add_periodic_timer(@gossip_interval) {
216
235
  query = Query.new(Peer)
@@ -1,3 +1,3 @@
1
1
  module Pokan #:nodoc:
2
- VERSION = "0.1.0rc2" unless defined? Pokan::VERSION
2
+ VERSION = "0.2.0" unless defined? Pokan::VERSION
3
3
  end
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pokan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0rc2
5
- prerelease: 5
4
+ version: 0.2.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Renato Mascarenhas
@@ -11,88 +11,11 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2011-11-10 00:00:00.000000000 Z
14
+ date: 2011-11-14 00:00:00.000000000 Z
15
15
  dependencies:
16
- - !ruby/object:Gem::Dependency
17
- name: eventmachine
18
- requirement: &4402900 !ruby/object:Gem::Requirement
19
- none: false
20
- requirements:
21
- - - ! '>='
22
- - !ruby/object:Gem::Version
23
- version: '0'
24
- type: :runtime
25
- prerelease: false
26
- version_requirements: *4402900
27
- - !ruby/object:Gem::Dependency
28
- name: redis
29
- requirement: &4401200 !ruby/object:Gem::Requirement
30
- none: false
31
- requirements:
32
- - - ! '>='
33
- - !ruby/object:Gem::Version
34
- version: '0'
35
- type: :runtime
36
- prerelease: false
37
- version_requirements: *4401200
38
- - !ruby/object:Gem::Dependency
39
- name: rspec
40
- requirement: &4400540 !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- type: :development
47
- prerelease: false
48
- version_requirements: *4400540
49
- - !ruby/object:Gem::Dependency
50
- name: bundler
51
- requirement: &4399740 !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
54
- - - ! '>='
55
- - !ruby/object:Gem::Version
56
- version: '0'
57
- type: :development
58
- prerelease: false
59
- version_requirements: *4399740
60
- - !ruby/object:Gem::Dependency
61
- name: jeweler
62
- requirement: &4398600 !ruby/object:Gem::Requirement
63
- none: false
64
- requirements:
65
- - - ! '>='
66
- - !ruby/object:Gem::Version
67
- version: '0'
68
- type: :development
69
- prerelease: false
70
- version_requirements: *4398600
71
- - !ruby/object:Gem::Dependency
72
- name: guard
73
- requirement: &4410060 !ruby/object:Gem::Requirement
74
- none: false
75
- requirements:
76
- - - ! '>='
77
- - !ruby/object:Gem::Version
78
- version: '0'
79
- type: :development
80
- prerelease: false
81
- version_requirements: *4410060
82
- - !ruby/object:Gem::Dependency
83
- name: guard-rspec
84
- requirement: &4408100 !ruby/object:Gem::Requirement
85
- none: false
86
- requirements:
87
- - - ! '>='
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: *4408100
93
16
  - !ruby/object:Gem::Dependency
94
17
  name: json
95
- requirement: &4415740 !ruby/object:Gem::Requirement
18
+ requirement: &4674160 !ruby/object:Gem::Requirement
96
19
  none: false
97
20
  requirements:
98
21
  - - ! '>='
@@ -100,10 +23,10 @@ dependencies:
100
23
  version: '0'
101
24
  type: :runtime
102
25
  prerelease: false
103
- version_requirements: *4415740
26
+ version_requirements: *4674160
104
27
  - !ruby/object:Gem::Dependency
105
28
  name: eventmachine
106
- requirement: &4414900 !ruby/object:Gem::Requirement
29
+ requirement: &4673000 !ruby/object:Gem::Requirement
107
30
  none: false
108
31
  requirements:
109
32
  - - ! '>='
@@ -111,10 +34,10 @@ dependencies:
111
34
  version: '0'
112
35
  type: :runtime
113
36
  prerelease: false
114
- version_requirements: *4414900
37
+ version_requirements: *4673000
115
38
  - !ruby/object:Gem::Dependency
116
39
  name: redis
117
- requirement: &4430040 !ruby/object:Gem::Requirement
40
+ requirement: &4671840 !ruby/object:Gem::Requirement
118
41
  none: false
119
42
  requirements:
120
43
  - - ! '>='
@@ -122,7 +45,7 @@ dependencies:
122
45
  version: '0'
123
46
  type: :runtime
124
47
  prerelease: false
125
- version_requirements: *4430040
48
+ version_requirements: *4671840
126
49
  description: ! "pokan is an implementation of the Gossip protocol \n (best described
127
50
  in http://www.cs.cornell.edu/home/rvr/papers/flowgossip.pdf),\n which aims to
128
51
  have a simple, event based API capable of being used in large,\n not previously
@@ -130,11 +53,10 @@ description: ! "pokan is an implementation of the Gossip protocol \n (best de
130
53
  email: haze-gem@googlegroups.com
131
54
  executables: []
132
55
  extensions: []
133
- extra_rdoc_files:
134
- - LICENSE.txt
135
- - README.rdoc
56
+ extra_rdoc_files: []
136
57
  files:
137
58
  - .document
59
+ - .gitignore
138
60
  - .rspec
139
61
  - Gemfile
140
62
  - Gemfile.lock
@@ -154,7 +76,6 @@ files:
154
76
  - lib/pokan/server.rb
155
77
  - lib/pokan/server_messages.rb
156
78
  - lib/pokan/version.rb
157
- - pokan.gemspec
158
79
  - spec/pokan/connection_spec.rb
159
80
  - spec/pokan/entity_spec.rb
160
81
  - spec/pokan/event_handler_spec.rb
@@ -180,13 +101,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
180
101
  version: '0'
181
102
  segments:
182
103
  - 0
183
- hash: -244834025903410269
104
+ hash: 3581239812678751242
184
105
  required_rubygems_version: !ruby/object:Gem::Requirement
185
106
  none: false
186
107
  requirements:
187
- - - ! '>'
108
+ - - ! '>='
188
109
  - !ruby/object:Gem::Version
189
- version: 1.3.1
110
+ version: '0'
190
111
  requirements: []
191
112
  rubyforge_project:
192
113
  rubygems_version: 1.8.10
@@ -1,45 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = "pokan"
8
- s.version = "0.1.0rc1"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Renato Mascarenhas", "Rafael Regis do Prado", "Fabio Lima Pereira"]
12
- s.date = "2011-11-10"
13
- s.description = "pokan is an implementation of the Gossip protocol \n (best described in http://www.cs.cornell.edu/home/rvr/papers/flowgossip.pdf),\n which aims to have a simple, event based API capable of being used in large,\n not previously known networks."
14
- s.email = "haze-gem@googlegroups.com"
15
- s.files = [
16
- "pokan.gemspec"
17
- ]
18
- s.homepage = "http://github.com/haze/pokan"
19
- s.licenses = ["MIT"]
20
- s.require_paths = ["lib"]
21
- s.rubygems_version = "1.8.10"
22
- s.summary = "Gossip-protocol implementation with an event based API"
23
-
24
- if s.respond_to? :specification_version then
25
- s.specification_version = 3
26
-
27
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
28
- s.add_runtime_dependency(%q<eventmachine>, [">= 0"])
29
- s.add_runtime_dependency(%q<redis>, [">= 0"])
30
- s.add_development_dependency(%q<rspec>, [">= 0"])
31
- s.add_development_dependency(%q<bundler>, [">= 0"])
32
- s.add_development_dependency(%q<jeweler>, [">= 0"])
33
- s.add_development_dependency(%q<guard>, [">= 0"])
34
- s.add_development_dependency(%q<guard-rspec>, [">= 0"])
35
- else
36
- s.add_dependency(%q<eventmachine>, [">= 0"])
37
- s.add_dependency(%q<redis>, [">= 0"])
38
- s.add_dependency(%q<rspec>, [">= 0"])
39
- s.add_dependency(%q<bundler>, [">= 0"])
40
- s.add_dependency(%q<jeweler>, [">= 0"])
41
- s.add_dependency(%q<guard>, [">= 0"])
42
- s.add_dependency(%q<guard-rspec>, [">= 0"])
43
- end
44
- end
45
- end