arya-pandemic 0.5.2 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/lib/pandemic/server_side/peer.rb +34 -46
- data/pandemic.gemspec +2 -2
- data/test/peer_test.rb +1 -1
- metadata +2 -2
data/Rakefile
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'echoe'
|
4
4
|
|
5
|
-
Echoe.new('pandemic', '0.5.
|
5
|
+
Echoe.new('pandemic', '0.5.3') do |p|
|
6
6
|
p.description = "A framework for distributing work for real-time services and offline tasks."
|
7
7
|
p.url = "https://github.com/arya/pandemic/"
|
8
8
|
p.author = "Arya Asemanfar"
|
@@ -40,7 +40,7 @@ module Pandemic
|
|
40
40
|
@connection_pool.with_connection do |connection|
|
41
41
|
if connection && !connection.closed?
|
42
42
|
# debug("Writing client's request")
|
43
|
-
connection.write("
|
43
|
+
connection.write("P#{request.hash}#{[body.size].pack('N')}#{body}")
|
44
44
|
connection.flush
|
45
45
|
# debug("Finished writing client's request")
|
46
46
|
else
|
@@ -68,7 +68,7 @@ module Pandemic
|
|
68
68
|
# debug("Incoming connection thread started")
|
69
69
|
while @server.running
|
70
70
|
# debug("Listening for incoming requests")
|
71
|
-
request = connection.
|
71
|
+
request = connection.read(15)
|
72
72
|
# debug("Read incoming request from peer")
|
73
73
|
|
74
74
|
if request.nil?
|
@@ -76,8 +76,8 @@ module Pandemic
|
|
76
76
|
break
|
77
77
|
else
|
78
78
|
# debug("Received incoming (#{request.strip})")
|
79
|
-
handle_incoming_request(request, connection) if request =~ /^
|
80
|
-
handle_incoming_response(request, connection) if request =~ /^
|
79
|
+
handle_incoming_request(request, connection) if request =~ /^P/
|
80
|
+
handle_incoming_response(request, connection) if request =~ /^R/
|
81
81
|
end
|
82
82
|
end
|
83
83
|
rescue Exception => e
|
@@ -127,52 +127,40 @@ module Pandemic
|
|
127
127
|
|
128
128
|
def handle_incoming_request(request, connection)
|
129
129
|
# debug("Identified as request")
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
warn("Unhandled exception in incoming request read:\n#{e.inspect}\n#{e.backtrace.join("\n")}")
|
144
|
-
end
|
145
|
-
# debug("Processing body")
|
146
|
-
process_request(hash, request_body)
|
147
|
-
else
|
148
|
-
warn("Malformed incoming request: #{request.strip}")
|
149
|
-
# when the incoming request was malformed
|
150
|
-
# TODO: what to do here?
|
130
|
+
hash = request[1,10]
|
131
|
+
size = request[11, 4].unpack('N').first
|
132
|
+
# debug("Incoming request: #{hash} #{size}")
|
133
|
+
begin
|
134
|
+
# debug("Reading request body")
|
135
|
+
request_body = connection.read(size)
|
136
|
+
# debug("Finished reading request body")
|
137
|
+
rescue EOFError, TruncatedDataError
|
138
|
+
# debug("Failed to read request body")
|
139
|
+
# TODO: what to do here?
|
140
|
+
return false
|
141
|
+
rescue Exception => e
|
142
|
+
warn("Unhandled exception in incoming request read:\n#{e.inspect}\n#{e.backtrace.join("\n")}")
|
151
143
|
end
|
144
|
+
# debug("Processing body")
|
145
|
+
process_request(hash, request_body)
|
152
146
|
end
|
153
147
|
|
154
148
|
def handle_incoming_response(response, connection)
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
warn("Unhandled exception in incoming response read:\n#{e.inspect}\n#{e.backtrace.join("\n")}")
|
169
|
-
end
|
170
|
-
process_response(hash, response_body)
|
171
|
-
else
|
172
|
-
warn("Malformed incoming response: #{response.strip}")
|
173
|
-
# when the incoming response was malformed
|
174
|
-
# TODO: what to do here?
|
149
|
+
hash = response[1,10]
|
150
|
+
size = response[11, 4].unpack('N').first
|
151
|
+
# debug("Incoming response: #{hash} #{size}")
|
152
|
+
begin
|
153
|
+
# debug("Reading response body")
|
154
|
+
response_body = connection.read(size)
|
155
|
+
# debug("Finished reading response body")
|
156
|
+
rescue EOFError, TruncatedDataError
|
157
|
+
# debug("Failed to read response body")
|
158
|
+
# TODO: what to do here?
|
159
|
+
return false
|
160
|
+
rescue Exception => e
|
161
|
+
warn("Unhandled exception in incoming response read:\n#{e.inspect}\n#{e.backtrace.join("\n")}")
|
175
162
|
end
|
163
|
+
process_response(hash, response_body)
|
176
164
|
end
|
177
165
|
|
178
166
|
|
@@ -184,7 +172,7 @@ module Pandemic
|
|
184
172
|
# debug("Processing finished (#{hash})")
|
185
173
|
@connection_pool.with_connection do |connection|
|
186
174
|
# debug( "Sending response (#{hash})")
|
187
|
-
connection.write("
|
175
|
+
connection.write("R#{hash}#{[response.size].pack('N')}#{response}")
|
188
176
|
connection.flush
|
189
177
|
# debug( "Finished sending response (#{hash})")
|
190
178
|
end
|
data/pandemic.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{pandemic}
|
5
|
-
s.version = "0.5.
|
5
|
+
s.version = "0.5.3"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Arya Asemanfar"]
|
9
|
-
s.date = %q{2009-08-
|
9
|
+
s.date = %q{2009-08-16}
|
10
10
|
s.description = %q{A framework for distributing work for real-time services and offline tasks.}
|
11
11
|
s.email = %q{aryaasemanfar@gmail.com}
|
12
12
|
s.extra_rdoc_files = ["lib/pandemic/client_side/cluster_connection.rb", "lib/pandemic/client_side/config.rb", "lib/pandemic/client_side/connection.rb", "lib/pandemic/client_side/connection_proxy.rb", "lib/pandemic/client_side/pandemize.rb", "lib/pandemic/connection_pool.rb", "lib/pandemic/mutex_counter.rb", "lib/pandemic/requests_per_second.rb", "lib/pandemic/server_side/client.rb", "lib/pandemic/server_side/config.rb", "lib/pandemic/server_side/handler.rb", "lib/pandemic/server_side/peer.rb", "lib/pandemic/server_side/processor.rb", "lib/pandemic/server_side/request.rb", "lib/pandemic/server_side/server.rb", "lib/pandemic/util.rb", "lib/pandemic.rb", "README.markdown"]
|
data/test/peer_test.rb
CHANGED
@@ -39,7 +39,7 @@ class PeerTest < Test::Unit::TestCase
|
|
39
39
|
@connection_pool.expects(:with_connection).yields(conn)
|
40
40
|
|
41
41
|
conn.stubs(:closed? => false)
|
42
|
-
conn.expects(:write).with("
|
42
|
+
conn.expects(:write).with("P#{request.hash}#{[body.size].pack('N')}#{body}")
|
43
43
|
conn.expects(:flush)
|
44
44
|
|
45
45
|
@peer.client_request(request, body)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arya-pandemic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arya Asemanfar
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-08-
|
12
|
+
date: 2009-08-16 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|