pokan 0.1.0rc2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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