seapig-client-ruby 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a2ff3c8fd5b96df4a2642b77584d2ac0f6da66ad
4
- data.tar.gz: 8e9571f50d92b5805304bdaa49606b6906060aac
3
+ metadata.gz: 10d50a61c5dd7f36d2a6530bdf9d303dec754827
4
+ data.tar.gz: b4148df117120608d84f0f41c7cb4cdb363f2202
5
5
  SHA512:
6
- metadata.gz: 8c93cf68cf379b969aa0756b5de9265001ef48a15c141fbdae85e0b0d8d419b61ae73d1dcb1ed5625594d70f5d804ac34f06fc1b9e724290efb02056e99b079a
7
- data.tar.gz: e391af96eeb2170b8b9c58a8a3fd17f296dc00af4f3f58c9be54493dc5d35025afd063d3815bb57942d0f6814611c26fed3f85fab0e491551384d66ab9355f80
6
+ metadata.gz: 90ea378ee0ee331981f43c32f4801bb3435f1969545f83462b7862058fc453c69dcbb95758e27ecd3d5461cb316d65aedff2cc9bee5442592caf1c152b10c947
7
+ data.tar.gz: 2062f52ae81b2aba65d8a79ace7ccfa8db6820d140197886d67fc634f399aba3334888cd76aeb907f8196b6740100d549dcae8f77a8b8b341fae536a2fe2dba7
data/bin/seapig-observer CHANGED
@@ -7,12 +7,13 @@ require 'pp'
7
7
 
8
8
  OPTIONS = Slop.parse { |o|
9
9
  o.string '-c', '--connect', "Seapig server address (default: ws://127.0.0.1:3001)", default: "ws://127.0.0.1:3001"
10
+ o.bool '-d', '--debug', 'Show debug messages'
10
11
  o.on '-h', '--help' do puts o; exit end
11
12
  }
12
13
 
13
14
  EM.run {
14
15
 
15
- SeapigClient.new(OPTIONS["connect"],name: 'observer').slave(OPTIONS.arguments[0]).onchange { |what|
16
+ SeapigClient.new(OPTIONS["connect"], name: 'observer', debug: OPTIONS.debug?).slave(OPTIONS.arguments[0]).onstatuschange { |what|
16
17
  puts "-"*80 + " " + Time.new.to_s
17
18
  puts what.id
18
19
  if what.destroyed
data/bin/seapig-worker CHANGED
@@ -8,6 +8,7 @@ STDOUT.sync = true
8
8
 
9
9
  OPTIONS = Slop.parse { |o|
10
10
  o.string '-c', '--connect', "Seapig server address (default: ws://127.0.0.1:3001)", default: "ws://127.0.0.1:3001"
11
+ o.bool '-d', '--debug', 'Show debug messages'
11
12
  o.on '-h', '--help' do puts o; exit end
12
13
  }
13
14
 
@@ -33,7 +34,7 @@ end
33
34
 
34
35
  EM.run {
35
36
 
36
- client = SeapigClient.new(OPTIONS["connect"], name: 'worker')
37
+ client = SeapigClient.new(OPTIONS["connect"], name: 'worker', debug: OPTIONS.debug?)
37
38
 
38
39
  Producer.all.each { |producer|
39
40
  producer.patterns.each { |pattern|
@@ -68,6 +68,7 @@ class SeapigClient
68
68
  }
69
69
  @master_objects.each_pair { |id, object|
70
70
  @socket.send JSON.dump(action: 'object-producer-register', pattern: id, :"version-known" => object.version)
71
+ object.children.each { |child_id, child| child.upload(0, {}, child.version, true) } if id.include?('*')
71
72
  }
72
73
  @last_communication_at = Time.new.to_f
73
74
  }
@@ -100,17 +101,17 @@ class SeapigClient
100
101
  }
101
102
  when 'object-destroy'
102
103
  @slave_objects.each_pair { |id, object|
103
- object.destroy(message) if object.matches(message['id'])
104
+ object.destroy(message['id']) if object.matches(message['id'])
104
105
  }
105
106
  @master_objects.each_pair { |id, object|
106
- object.destroy(message) if object.matches(message['id'])
107
+ object.destroy(message['id']) if object.matches(message['id'])
107
108
  }
108
109
  when 'object-produce'
109
110
  handler = @master_objects.values.find { |object| object.matches(message['id']) }
110
111
  puts 'Seapig server submitted invalid "produce" request: '+message.inspect if (not handler) and @options[:debug]
111
112
  handler.produce(message['id'],message['version-inferred']) if handler
112
113
  else
113
- raise 'Seapig server submitted an unsupported message: '+message.inspect
114
+ raise 'Seapig server submitted an unsupported message: '+message.inspect if @options[:debug]
114
115
  end
115
116
  @last_communication_at = Time.new.to_f
116
117
  }
@@ -133,7 +134,7 @@ class SeapigClient
133
134
  @reconnection_timer = nil
134
135
  end
135
136
  if @socket
136
- if detach_fd
137
+ if detach_fd #FIXME: this is, most likely, broken
137
138
  IO.new(@socket.detach).close
138
139
  @socket.onclose {}
139
140
  @socket_onclose.call("fd detach", "fd detach")
@@ -146,7 +147,7 @@ class SeapigClient
146
147
  end
147
148
 
148
149
 
149
- def detach_fd
150
+ def detach_fd #FIXME: this is, most likely, broken
150
151
  disconnect(true)
151
152
  end
152
153
 
@@ -350,11 +351,10 @@ class SeapigMasterObject < SeapigObject
350
351
  end
351
352
  end
352
353
 
353
- private
354
354
 
355
355
  def upload(version_old, data_old, version_new, data_new)
356
356
  if @client.connected
357
- if version_old == 0 or data_new == false
357
+ if version_old == 0 or data_new == false or data_new == true
358
358
  @client.socket.send JSON.dump(id: @id, action: 'object-patch', :"version-new" => version_new, value: data_new)
359
359
  else
360
360
  diff = JsonDiff.generate(data_old, data_new)
@@ -377,7 +377,7 @@ class SeapigWildcardSlaveObject < SeapigSlaveObject
377
377
 
378
378
 
379
379
  def patch(message)
380
- self[message['id']] ||= SeapigSlaveObject.new(@client, message['id'],{}).onchange(&@onchange_proc)
380
+ self[message['id']] ||= SeapigSlaveObject.new(@client, message['id'],{}).onchange(&@onchange_proc).onstatuschange(&@onstatuschange_proc).ondestroy(&@ondestroy_proc)
381
381
  self[message['id']].patch(message)
382
382
  end
383
383
 
@@ -393,16 +393,17 @@ end
393
393
 
394
394
  class SeapigWildcardMasterObject < SeapigMasterObject
395
395
 
396
+ attr_reader :children
397
+
396
398
  def initialize(client, id, options)
397
399
  super(client, id, options)
398
- @children = ObjectSpace::WeakMap.new
400
+ @children = {}
399
401
  @options = options
400
402
  end
401
403
 
402
404
 
403
405
  def [](id)
404
- key = @children.keys.find { |key| key == id }
405
- @children[(key or id)] ||= SeapigMasterObject.new(@client, id, @options)
406
+ @children[id] ||= SeapigMasterObject.new(@client, id, @options).ondestroy(&@ondestroy_proc)
406
407
  end
407
408
 
408
409
 
@@ -416,9 +417,8 @@ class SeapigWildcardMasterObject < SeapigMasterObject
416
417
  end
417
418
 
418
419
 
419
- def destroy(message)
420
- key = @children.keys.find { |key| key == id }
421
- return if not (key and destroyed = @children[key])
420
+ def destroy(id)
421
+ return if not (destroyed = @children.delete(id))
422
422
  destroyed.destroy(id)
423
423
  end
424
424
 
@@ -1,3 +1,3 @@
1
1
  module Seapig
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seapig-client-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - yunta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-26 00:00:00.000000000 Z
11
+ date: 2017-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: websocket-eventmachine-client