seapig-client 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/seapig-worker +7 -7
- data/lib/seapig/client.rb +52 -11
- data/lib/seapig/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e6d7c793fd0adf28e9241bfa324a89cd5469ba8
|
4
|
+
data.tar.gz: 9fa8f737be79b15bcefe0e130bccf3c47d134f7d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da0d27c4a875d53657bdade99201b3e2bf48c6bc081856e9c080fb0d096deb5f1e418ecdfb2cf4b4ed27dc79bb74b7fc1ef77acbeb141dd3a364fb4709a56887
|
7
|
+
data.tar.gz: 1feeb44ee9179a5f5800038c6983f0dd5caf46da671513ff1ec2c8a46f06847579cb4bd9e8d9bc43c379ab94eed3246aa20db41a20b0afef0ae78c61f6e28023
|
data/bin/seapig-worker
CHANGED
@@ -9,11 +9,11 @@ class Producer
|
|
9
9
|
class << self
|
10
10
|
attr_reader :patterns
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
def self.all
|
14
14
|
@producers ||= ObjectSpace.each_object(Class).select { |klass| klass < Producer }
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
end
|
18
18
|
|
19
19
|
($LOAD_PATH+['./lib']).each { |load_path|
|
@@ -30,12 +30,12 @@ EM.run {
|
|
30
30
|
Producer.all.each { |producer|
|
31
31
|
producer.patterns.each { |pattern|
|
32
32
|
object = server.master(pattern)
|
33
|
-
object.onproduce { |
|
33
|
+
object.onproduce { |child|
|
34
34
|
start = Time.new
|
35
|
-
print '
|
36
|
-
data,version = producer.produce(object_id)
|
37
|
-
|
38
|
-
puts 'in %5.2fs'%[(Time.new-start).to_f]
|
35
|
+
print 'Sent %-30s '%[child.object_id]
|
36
|
+
data, version = producer.produce(child.object_id)
|
37
|
+
child.reset.set(data).send(version)
|
38
|
+
puts 'in %5.2fs - %s'%[(Time.new-start).to_f,version.inspect]
|
39
39
|
}
|
40
40
|
}
|
41
41
|
}
|
data/lib/seapig/client.rb
CHANGED
@@ -85,8 +85,8 @@ class SeapigServer
|
|
85
85
|
}
|
86
86
|
when 'object-produce'
|
87
87
|
handler = @master_objects.keys.find { |key| key.include?('*') and (message['id'] =~ Regexp.new(Regexp.escape(key).gsub('\*','.*?'))) or (message['id'] == key) }
|
88
|
-
|
89
|
-
@master_objects[handler].
|
88
|
+
raise "Stupid produce" if not @master_objects[handler]
|
89
|
+
@master_objects[handler].produce(message['id'],message['version'])
|
90
90
|
else
|
91
91
|
p :wtf, message
|
92
92
|
end
|
@@ -142,7 +142,8 @@ class SeapigServer
|
|
142
142
|
|
143
143
|
|
144
144
|
def master(object_id)
|
145
|
-
object = SeapigObject.new(self, object_id)
|
145
|
+
object = if object_id.include?('*') then SeapigWildcardObject.new(self, object_id) else SeapigObject.new(self, object_id) end
|
146
|
+
object.version = nil
|
146
147
|
@socket.send JSON.dump(action: 'object-producer-register', pattern: object_id) if @connected
|
147
148
|
@master_objects[object_id] = object
|
148
149
|
end
|
@@ -160,7 +161,8 @@ end
|
|
160
161
|
|
161
162
|
class SeapigObject < Hash
|
162
163
|
|
163
|
-
attr_accessor :version, :object_id, :
|
164
|
+
attr_accessor :version, :object_id, :stall, :parent, :destroyed, :version_requested
|
165
|
+
attr_reader :received_at
|
164
166
|
|
165
167
|
|
166
168
|
def matches?(id)
|
@@ -193,6 +195,8 @@ class SeapigObject < Hash
|
|
193
195
|
|
194
196
|
|
195
197
|
def patch(message)
|
198
|
+
@received_at = Time.new
|
199
|
+
old_data = @shadow
|
196
200
|
if (not message['old_version']) or (message['old_version'] == 0) or (message['value'])
|
197
201
|
self.clear
|
198
202
|
elsif not @version == message['old_version']
|
@@ -207,24 +211,31 @@ class SeapigObject < Hash
|
|
207
211
|
end
|
208
212
|
@version = message['new_version']
|
209
213
|
@valid = true
|
210
|
-
@
|
214
|
+
@shadow = JSON.load(JSON.dump(self))
|
215
|
+
@onchange_proc.call(self) if @onchange_proc and old_data != @shadow
|
216
|
+
end
|
217
|
+
|
218
|
+
|
219
|
+
def reset()
|
220
|
+
@version = 0
|
221
|
+
@shadow = {}
|
222
|
+
self
|
211
223
|
end
|
212
224
|
|
213
225
|
|
214
|
-
def set(data
|
226
|
+
def set(data)
|
215
227
|
if data
|
216
228
|
@stall = false
|
217
229
|
self.clear
|
218
230
|
self.merge!(data)
|
219
|
-
@shadow = sanitized
|
220
231
|
else
|
221
232
|
@stall = true
|
222
233
|
end
|
223
|
-
|
234
|
+
self
|
224
235
|
end
|
225
236
|
|
226
237
|
|
227
|
-
def
|
238
|
+
def send(new_version=nil)
|
228
239
|
old_version = @version
|
229
240
|
old_object = @shadow
|
230
241
|
@version = (new_version or (Time.new.to_f*1000000).to_i)
|
@@ -257,6 +268,22 @@ class SeapigObject < Hash
|
|
257
268
|
end
|
258
269
|
end
|
259
270
|
@server.socket.send JSON.dump(message)
|
271
|
+
self
|
272
|
+
end
|
273
|
+
|
274
|
+
|
275
|
+
def produce(object_id, version)
|
276
|
+
@version_requested = version
|
277
|
+
if @onproduce_proc
|
278
|
+
@onproduce_proc.call(self)
|
279
|
+
else
|
280
|
+
self.upload(0,{},object_id)
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
|
285
|
+
def valid?
|
286
|
+
@valid
|
260
287
|
end
|
261
288
|
|
262
289
|
end
|
@@ -265,11 +292,15 @@ end
|
|
265
292
|
|
266
293
|
class SeapigWildcardObject < SeapigObject
|
267
294
|
|
295
|
+
def initialize(*args)
|
296
|
+
super(*args)
|
297
|
+
@children = ObjectSpace::WeakMap.new
|
298
|
+
end
|
299
|
+
|
268
300
|
|
269
301
|
def patch(message)
|
270
302
|
self[message['id']] ||= SeapigObject.new(@server, message['id'], self)
|
271
303
|
self[message['id']].patch(message)
|
272
|
-
# puts JSON.dump(self)
|
273
304
|
@onchange_proc.call(self[message['id']]) if @onchange_proc
|
274
305
|
end
|
275
306
|
|
@@ -281,6 +312,16 @@ class SeapigWildcardObject < SeapigObject
|
|
281
312
|
end
|
282
313
|
end
|
283
314
|
|
284
|
-
end
|
285
315
|
|
316
|
+
def produce(object_id, version)
|
317
|
+
key = @children.keys.find { |key| key == object_id }
|
318
|
+
child = (@children[(key or object_id)] ||= SeapigObject.new(@server, object_id, self))
|
319
|
+
child.version_requested = version
|
320
|
+
if @onproduce_proc
|
321
|
+
@onproduce_proc.call(child)
|
322
|
+
else
|
323
|
+
child.upload(0,{},object_id)
|
324
|
+
end
|
325
|
+
end
|
286
326
|
|
327
|
+
end
|
data/lib/seapig/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: seapig-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- yunta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: websocket-eventmachine-client
|