seapig-client-ruby 0.2.0 → 0.2.1

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 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