seapig-server 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/seapig-server +22 -13
- data/lib/seapig/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e65c3f295cd0df66fa6eb84b5f378f5bdaf154c
|
4
|
+
data.tar.gz: bc08a91525e10c22b8b43f53229c88730fc9cb87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d45ae2a851d939a90e515d2fb1f77f45cec89448d66f5e4e57e9817b964814fcb97a7f49335d45c9c488176426236c45cd8b829e99ed26d138f6310183ed2bf2
|
7
|
+
data.tar.gz: 955bcee21a5a417cbaa682562336c618a10380f9c7c8261f8a72f70c35f5a95f2eb8efe5635494bb5689d2db07825dbddafef4ac551c7cb11e9ebab7360089c6
|
data/bin/seapig-server
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
require 'websocket-eventmachine-server'
|
5
5
|
require 'narray'
|
6
6
|
require 'oj'
|
7
|
-
require '
|
7
|
+
require 'jsondiff'
|
8
8
|
require 'hana'
|
9
9
|
require 'set'
|
10
10
|
|
@@ -18,7 +18,7 @@ OBJECT_CACHE_SIZE = 1
|
|
18
18
|
|
19
19
|
$stdout.sync = true
|
20
20
|
|
21
|
-
Oj.default_options = { mode: :
|
21
|
+
Oj.default_options = { mode: :compat }
|
22
22
|
|
23
23
|
|
24
24
|
module WebSocket
|
@@ -141,6 +141,11 @@ module SeapigObjectStore
|
|
141
141
|
end
|
142
142
|
|
143
143
|
|
144
|
+
# data can be one of:
|
145
|
+
# - Hash => given version corresponds to given data
|
146
|
+
# - false => given version has no data (aka. stall)
|
147
|
+
# - true => given version exists (data unknown)
|
148
|
+
# - nil => given version could not be generated (data unknown)
|
144
149
|
def self.version_set(client,id,version,data,requested_version)
|
145
150
|
raise "Update of pattern doesn't make sense" if id.starexp?
|
146
151
|
|
@@ -165,7 +170,7 @@ module SeapigObjectStore
|
|
165
170
|
end
|
166
171
|
}
|
167
172
|
if version.kind_of? Hash
|
168
|
-
object.version_needed = {} if not object.version_needed
|
173
|
+
object.version_needed = {} if (not object.version_needed) or object.version_needed.kind_of?(Integer)
|
169
174
|
old_dependencies = (@@dependencies[id] or Set.new)
|
170
175
|
new_dependencies = (@@dependencies[id] = Set.new(version.keys))
|
171
176
|
(new_dependencies - old_dependencies).each { |added_dependency|
|
@@ -237,7 +242,9 @@ private
|
|
237
242
|
|
238
243
|
def version_set(data,version,requested_version)
|
239
244
|
return false if data == nil
|
240
|
-
return false if not version_newer?(version)
|
245
|
+
return false if not SeapigObject.version_newer?(version_latest, version)
|
246
|
+
@version_needed = version if data == true and ((not @version_needed) or SeapigObject.version_newer?(@version_needed, version))
|
247
|
+
return false if data == true
|
241
248
|
@versions << [version,data]
|
242
249
|
(Set.new(@wildcard_consumers.keys)+@direct_consumers).each { |client| client.object_update(@id, version, data) } if data
|
243
250
|
versions_with_valid_data = 0
|
@@ -257,8 +264,7 @@ private
|
|
257
264
|
end
|
258
265
|
|
259
266
|
|
260
|
-
def version_newer?(vb)
|
261
|
-
latest = version_latest
|
267
|
+
def self.version_newer?(latest,vb)
|
262
268
|
return latest <=> vb if (not latest.kind_of?(Hash)) and (not vb.kind_of?(Hash))
|
263
269
|
return -1 if (not latest.kind_of?(Hash)) and ( vb.kind_of?(Hash))
|
264
270
|
return 1 if ( latest.kind_of?(Hash)) and (not vb.kind_of?(Hash))
|
@@ -390,7 +396,7 @@ private
|
|
390
396
|
def self.dequeue(client,object)
|
391
397
|
object = @@queue.find { |candidate_object| candidate_object.direct_producers.include?(client) or candidate_object.wildcard_producers.has_key?(client) } if not object
|
392
398
|
return false if not @@queue.include?(object)
|
393
|
-
version_snapshot = (object.version_needed == nil ? nil : object.version_needed.clone)
|
399
|
+
version_snapshot = (object.version_needed == nil ? nil : (object.version_needed.kind_of?(Fixnum) ? object.version_needed : object.version_needed.clone))
|
394
400
|
client.object_produce(object.id, version_snapshot)
|
395
401
|
@@queue.delete(object)
|
396
402
|
@@producing[client] = object
|
@@ -480,9 +486,10 @@ class Client
|
|
480
486
|
end
|
481
487
|
|
482
488
|
|
483
|
-
def producer_register(pattern)
|
489
|
+
def producer_register(pattern, known_version)
|
484
490
|
@produces.add(pattern)
|
485
491
|
SeapigObjectStore.producer_register(pattern, self)
|
492
|
+
SeapigObjectStore.version_set(self, pattern, known_version, true, false) if known_version and not pattern.starexp?
|
486
493
|
end
|
487
494
|
|
488
495
|
|
@@ -497,9 +504,11 @@ class Client
|
|
497
504
|
end
|
498
505
|
|
499
506
|
|
500
|
-
def consumer_register(pattern)
|
507
|
+
def consumer_register(pattern, known_version)
|
501
508
|
@consumes.add(pattern)
|
509
|
+
@versions[pattern] = known_version if not pattern.starexp?
|
502
510
|
SeapigObjectStore.consumer_register(pattern, self)
|
511
|
+
gc_versions
|
503
512
|
end
|
504
513
|
|
505
514
|
|
@@ -527,7 +536,7 @@ class Client
|
|
527
536
|
{ "value" => object_data }
|
528
537
|
else
|
529
538
|
diff = SeapigObjectStore.cache_get(object_id,[:diff,old_version,object_version])
|
530
|
-
diff = SeapigObjectStore.cache_set(object_id,[:diff,old_version,object_version],JsonDiff.
|
539
|
+
diff = SeapigObjectStore.cache_set(object_id,[:diff,old_version,object_version],JsonDiff.generate(old_data, object_data)) if not diff
|
531
540
|
{ "patch" => diff }
|
532
541
|
end
|
533
542
|
|
@@ -607,7 +616,7 @@ class Client
|
|
607
616
|
|
608
617
|
|
609
618
|
def self.send_heartbeats
|
610
|
-
@@clients_by_socket.each_pair { |socket,client| socket.send Oj.dump(action
|
619
|
+
@@clients_by_socket.each_pair { |socket,client| socket.send Oj.dump('action' => 'heartbeat') if client.options['heartbeat'] }
|
611
620
|
end
|
612
621
|
|
613
622
|
|
@@ -664,7 +673,7 @@ EM.run {
|
|
664
673
|
case message['action']
|
665
674
|
when 'object-producer-register'
|
666
675
|
fail unless message['pattern']
|
667
|
-
client.producer_register(message['pattern'])
|
676
|
+
client.producer_register(message['pattern'],message['known-version'])
|
668
677
|
when 'object-producer-unregister'
|
669
678
|
fail unless message['pattern']
|
670
679
|
client.producer_unregister(message['pattern'])
|
@@ -673,7 +682,7 @@ EM.run {
|
|
673
682
|
client.object_patch(object_id,message['patch'], message['value'], message['old_version'], message['new_version'])
|
674
683
|
when 'object-consumer-register'
|
675
684
|
fail unless message['id']
|
676
|
-
client.consumer_register(object_id)
|
685
|
+
client.consumer_register(object_id,message['known-version'])
|
677
686
|
when 'object-consumer-unregister'
|
678
687
|
fail unless message['id']
|
679
688
|
client.consumer_unregister(object_id)
|
data/lib/seapig/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: seapig-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- yunta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09
|
11
|
+
date: 2016-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: websocket-eventmachine-server
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: jsondiff
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|