seapig-client 0.1.3 → 0.1.4
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.
- 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
|