datawire_mdk 2.0.15 → 2.0.16

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.
data/lib/mdk.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Quark 1.0.443 run at 2016-10-05 18:08:41.189562
1
+ # Quark 1.0.452 run at 2016-10-13 16:26:58.627837
2
2
  module Quark
3
3
  require "quark"
4
4
  def self.mdk; Mdk; end
@@ -8,12 +8,13 @@ require_relative 'quark/reflect' # 0 ('quark',) ()
8
8
  require_relative 'mdk_runtime' # 0 () ()
9
9
  require_relative 'mdk_discovery' # 0 () ()
10
10
  require_relative 'quark' # 0 () ()
11
+ require_relative 'mdk_protocol' # 0 () ()
11
12
  require_relative 'mdk_tracing' # 0 () ()
12
13
  require_relative 'quark/concurrent' # 0 ('quark',) ()
13
14
  require_relative 'mdk_introspection' # 0 () ()
14
15
  require_relative 'mdk_discovery/protocol' # 0 ('mdk_discovery',) ()
15
16
  require_relative 'mdk_discovery/synapse' # 0 ('mdk_discovery',) ()
16
- require_relative 'mdk_protocol' # 0 () ()
17
+ require_relative 'mdk_rtp' # 0 () ()
17
18
  require_relative 'mdk_runtime/promise' # 0 ('mdk_runtime',) ()
18
19
  require_relative 'mdk_util' # 0 () ()
19
20
 
@@ -123,6 +124,19 @@ class MDK < ::DatawireQuarkCore::QuarkObject
123
124
  nil
124
125
  end
125
126
 
127
+ ##
128
+ # Set the default timeout for MDK sessions.
129
+ #
130
+ # This is the maximum timeout; if a joined session has a lower
131
+ # timeout that will be used.
132
+ #
133
+
134
+ def setDefaultTimeout(seconds)
135
+ raise NotImplementedError, '`MDK.setDefaultTimeout` is an abstract method'
136
+
137
+ nil
138
+ end
139
+
126
140
  ##
127
141
  # Creates a new Session. A Session created in this way will
128
142
  # result in a new distributed trace. This should therefore
@@ -312,6 +326,8 @@ class Session < ::DatawireQuarkCore::QuarkObject
312
326
  ##
313
327
  # Locate a compatible service instance.
314
328
  #
329
+ # Uses a minimum of 10 seconds and the timeout set on the session.
330
+ #
315
331
 
316
332
  def resolve(service, version)
317
333
  raise NotImplementedError, '`Session.resolve` is an abstract method'
@@ -402,6 +418,40 @@ class Session < ::DatawireQuarkCore::QuarkObject
402
418
  nil
403
419
  end
404
420
 
421
+ ##
422
+ # Set how many seconds the session is expected to live from this point.
423
+ #
424
+ # If a timeout has previously been set the new timeout will only be
425
+ # used if it is lower than the existing timeout.
426
+ #
427
+ # The MDK will not enforce the timeout. Rather, it provides the
428
+ # information to any process or server in the same session (even if
429
+ # they are on different machines). By passing this timeout to
430
+ # blocking APIs you can ensure timeouts are enforced across a whole
431
+ # distributed session.
432
+ #
433
+
434
+ def setTimeout(seconds)
435
+ raise NotImplementedError, '`Session.setTimeout` is an abstract method'
436
+
437
+ nil
438
+ end
439
+
440
+ ##
441
+ # Return how many seconds until the session ought to end.
442
+ #
443
+ # This will only be accurate across multiple servers insofar as their
444
+ # clocks are in sync.
445
+ #
446
+ # If a timeout has not been set the result will be null.
447
+ #
448
+
449
+ def getRemainingTime()
450
+ raise NotImplementedError, '`Session.getRemainingTime` is an abstract method'
451
+
452
+ nil
453
+ end
454
+
405
455
  def __init_fields__()
406
456
 
407
457
 
@@ -414,7 +464,7 @@ Session.unlazy_statics
414
464
 
415
465
  def self.MDKImpl; MDKImpl; end
416
466
  class MDKImpl < ::DatawireQuarkCore::QuarkObject
417
- attr_accessor :logger, :_reflection_hack, :_runtime, :_disco, :_discoSource, :_tracer, :procUUID, :_running
467
+ attr_accessor :logger, :_reflection_hack, :_runtime, :_wsclient, :_openclose, :_disco, :_discoSource, :_tracer, :procUUID, :_running, :_defaultTimeout
418
468
  extend ::DatawireQuarkCore::Static
419
469
 
420
470
  static mdk_MDKImpl_ref: -> { nil }
@@ -432,20 +482,18 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
432
482
  (runtime).dependencies.registerService("failurepolicy_factory", self.getFailurePolicy(runtime))
433
483
  end
434
484
  @_disco = ::Quark.mdk_discovery.Discovery.new(runtime)
485
+ @_wsclient = self.getWSClient(runtime)
486
+ if ((@_wsclient) != (nil))
487
+ @_openclose = ::Quark.mdk_protocol.OpenCloseSubscriber.new(@_wsclient)
488
+ end
435
489
  env = runtime.getEnvVarsService()
436
- token = env.var("DATAWIRE_TOKEN").orElseGet("")
437
490
  discoFactory = self.getDiscoveryFactory(env)
438
491
  @_discoSource = discoFactory.create(@_disco, runtime)
439
492
  if (discoFactory.isRegistrar())
440
493
  (runtime).dependencies.registerService("discovery_registrar", @_discoSource)
441
494
  end
442
- if ((token) != (""))
443
- tracingURL = ::Quark.mdk._get(env, "MDK_TRACING_URL", "wss://tracing.datawire.io/ws/v1")
444
- tracingQueryURL = ::Quark.mdk._get(env, "MDK_TRACING_API_URL", "https://tracing.datawire.io/api/v1/logs")
445
- @_tracer = ::Quark.mdk_tracing.Tracer.new(runtime)
446
- (@_tracer).url = tracingURL
447
- (@_tracer).queryURL = tracingQueryURL
448
- (@_tracer).token = token
495
+ if ((@_wsclient) != (nil))
496
+ @_tracer = ::Quark.mdk_tracing.Tracer.new(runtime, @_wsclient)
449
497
  @_tracer.initContext()
450
498
  end
451
499
 
@@ -466,7 +514,7 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
466
514
  end
467
515
  result = ::DatawireQuarkCore.cast(nil) { ::Quark.mdk_discovery.DiscoverySourceFactory }
468
516
  if ((config).start_with?("datawire:"))
469
- result = ::Quark.mdk_discovery.protocol.DiscoClientFactory.new((config)[(9)...((config).size)])
517
+ result = ::Quark.mdk_discovery.protocol.DiscoClientFactory.new(@_wsclient)
470
518
  else
471
519
  if ((config).start_with?("synapse:path="))
472
520
  result = ::Quark.mdk_discovery.synapse.Synapse.new((config)[(13)...((config).size)])
@@ -499,6 +547,28 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
499
547
  nil
500
548
  end
501
549
 
550
+ ##
551
+ # Get a WSClient, unless env variables suggest the user doesn't want one.
552
+
553
+ def getWSClient(runtime)
554
+
555
+ env = runtime.getEnvVarsService()
556
+ token = env.var("DATAWIRE_TOKEN").orElseGet("")
557
+ disco_config = env.var("MDK_DISCOVERY_SOURCE").orElseGet("")
558
+ if ((token) == (""))
559
+ if ((disco_config).start_with?("datawire:"))
560
+ token = (disco_config)[(9)...((disco_config).size)]
561
+ else
562
+ return ::DatawireQuarkCore.cast(nil) { ::Quark.mdk_protocol.WSClient }
563
+ end
564
+ end
565
+ ddu = env.var("MDK_SERVER_URL")
566
+ url = ddu.orElseGet("wss://mcp.datawire.io/rtp")
567
+ return ::Quark.mdk_protocol.WSClient.new(runtime, ::Quark.mdk_rtp.getRTPParser(), url, token)
568
+
569
+ nil
570
+ end
571
+
502
572
  def _timeout()
503
573
 
504
574
  return 10.0
@@ -509,12 +579,13 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
509
579
  def start()
510
580
 
511
581
  (self)._running = true
582
+ if ((@_wsclient) != (nil))
583
+ (@_runtime).dispatcher.startActor(@_wsclient)
584
+ (@_runtime).dispatcher.startActor(@_openclose)
585
+ (@_runtime).dispatcher.startActor(@_tracer)
586
+ end
512
587
  (@_runtime).dispatcher.startActor(@_disco)
513
588
  (@_runtime).dispatcher.startActor(@_discoSource)
514
- if ((@_tracer) != (nil))
515
- @_tracer._openIfNeeded()
516
- (@_tracer)._client._startIfNeeded()
517
- end
518
589
 
519
590
  nil
520
591
  end
@@ -522,9 +593,13 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
522
593
  def stop()
523
594
 
524
595
  (self)._running = false
525
- (@_runtime).dispatcher.stopActor(@_disco)
526
596
  (@_runtime).dispatcher.stopActor(@_discoSource)
527
- @_tracer.stop()
597
+ (@_runtime).dispatcher.stopActor(@_disco)
598
+ if ((@_wsclient) != (nil))
599
+ (@_runtime).dispatcher.stopActor(@_tracer)
600
+ (@_runtime).dispatcher.stopActor(@_openclose)
601
+ (@_runtime).dispatcher.stopActor(@_wsclient)
602
+ end
528
603
  @_runtime.stop()
529
604
 
530
605
  nil
@@ -542,16 +617,31 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
542
617
  nil
543
618
  end
544
619
 
620
+ def setDefaultTimeout(seconds)
621
+
622
+ (self)._defaultTimeout = seconds
623
+
624
+ nil
625
+ end
626
+
545
627
  def session()
546
628
 
547
- return ::Quark.mdk.SessionImpl.new(self, nil)
629
+ session = ::Quark.mdk.SessionImpl.new(self, nil)
630
+ if ((@_defaultTimeout) != (nil))
631
+ session.setTimeout(@_defaultTimeout)
632
+ end
633
+ return session
548
634
 
549
635
  nil
550
636
  end
551
637
 
552
638
  def join(encodedContext)
553
639
 
554
- return ::Quark.mdk.SessionImpl.new(self, encodedContext)
640
+ session = ::Quark.mdk.SessionImpl.new(self, encodedContext)
641
+ if ((@_defaultTimeout) != (nil))
642
+ session.setTimeout(@_defaultTimeout)
643
+ end
644
+ return session
555
645
 
556
646
  nil
557
647
  end
@@ -577,6 +667,12 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
577
667
  if ((name) == ("_runtime"))
578
668
  return (self)._runtime
579
669
  end
670
+ if ((name) == ("_wsclient"))
671
+ return (self)._wsclient
672
+ end
673
+ if ((name) == ("_openclose"))
674
+ return (self)._openclose
675
+ end
580
676
  if ((name) == ("_disco"))
581
677
  return (self)._disco
582
678
  end
@@ -592,6 +688,9 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
592
688
  if ((name) == ("_running"))
593
689
  return (self)._running
594
690
  end
691
+ if ((name) == ("_defaultTimeout"))
692
+ return (self)._defaultTimeout
693
+ end
595
694
  return nil
596
695
 
597
696
  nil
@@ -608,6 +707,12 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
608
707
  if ((name) == ("_runtime"))
609
708
  (self)._runtime = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.MDKRuntime }
610
709
  end
710
+ if ((name) == ("_wsclient"))
711
+ (self)._wsclient = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.WSClient }
712
+ end
713
+ if ((name) == ("_openclose"))
714
+ (self)._openclose = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.OpenCloseSubscriber }
715
+ end
611
716
  if ((name) == ("_disco"))
612
717
  (self)._disco = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_discovery.Discovery }
613
718
  end
@@ -623,6 +728,9 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
623
728
  if ((name) == ("_running"))
624
729
  (self)._running = ::DatawireQuarkCore.cast(value) { ::Object }
625
730
  end
731
+ if ((name) == ("_defaultTimeout"))
732
+ (self)._defaultTimeout = ::DatawireQuarkCore.cast(value) { ::Float }
733
+ end
626
734
 
627
735
  nil
628
736
  end
@@ -632,11 +740,14 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
632
740
  self.logger = ::Quark.quark._getLogger("mdk")
633
741
  self._reflection_hack = nil
634
742
  self._runtime = nil
743
+ self._wsclient = nil
744
+ self._openclose = nil
635
745
  self._disco = nil
636
746
  self._discoSource = nil
637
747
  self._tracer = nil
638
748
  self.procUUID = ::Quark.quark.concurrent.Context.runtime().uuid()
639
749
  self._running = false
750
+ self._defaultTimeout = nil
640
751
 
641
752
  nil
642
753
  end
@@ -758,6 +869,31 @@ class SessionImpl < ::DatawireQuarkCore::QuarkObject
758
869
  nil
759
870
  end
760
871
 
872
+ def setTimeout(timeout)
873
+
874
+ current = self.getRemainingTime()
875
+ if ((current) == (nil))
876
+ current = timeout
877
+ end
878
+ if ((timeout) > (current))
879
+ timeout = current
880
+ end
881
+ self.set("timeout", ((@_mdk)._runtime.getTimeService().time()) + (timeout))
882
+
883
+ nil
884
+ end
885
+
886
+ def getRemainingTime()
887
+
888
+ deadline = ::DatawireQuarkCore.cast(self.get("timeout")) { ::Float }
889
+ if ((deadline) == (nil))
890
+ return ::DatawireQuarkCore.cast(nil) { ::Float }
891
+ end
892
+ return (deadline) - ((@_mdk)._runtime.getTimeService().time())
893
+
894
+ nil
895
+ end
896
+
761
897
  def route(service, version, target, targetVersion)
762
898
 
763
899
  routes = nil
@@ -900,7 +1036,12 @@ class SessionImpl < ::DatawireQuarkCore::QuarkObject
900
1036
 
901
1037
  def resolve(service, version)
902
1038
 
903
- return self.resolve_until(service, version, @_mdk._timeout())
1039
+ timeout = @_mdk._timeout()
1040
+ session_timeout = self.getRemainingTime()
1041
+ if (((session_timeout) != (nil)) && ((session_timeout) < (timeout)))
1042
+ timeout = session_timeout
1043
+ end
1044
+ return self.resolve_until(service, version, timeout)
904
1045
 
905
1046
  nil
906
1047
  end
data/lib/mdk_discovery.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Quark 1.0.443 run at 2016-10-05 18:08:41.189562
1
+ # Quark 1.0.452 run at 2016-10-13 16:26:58.627837
2
2
  module Quark
3
3
  require "quark"
4
4
  def self.mdk_discovery; MdkDiscovery; end
@@ -1,4 +1,4 @@
1
- # Quark 1.0.443 run at 2016-10-05 18:08:41.189562
1
+ # Quark 1.0.452 run at 2016-10-13 16:26:58.627837
2
2
  module Quark
3
3
  require "quark"
4
4
  def self.mdk_discovery; MdkDiscovery; end
@@ -8,9 +8,9 @@ module Protocol
8
8
  require "datawire-quark-core"
9
9
  require_relative '../quark/reflect' # 0 ('quark',) ('mdk_discovery',)
10
10
  require_relative '../mdk_discovery' # 0 () ('mdk_discovery',)
11
+ require_relative '../mdk_protocol' # 0 () ('mdk_discovery',)
11
12
  require_relative '../mdk_runtime/actors' # 0 ('mdk_runtime',) ('mdk_discovery',)
12
13
  require_relative '../mdk_runtime' # 0 () ('mdk_discovery',)
13
- require_relative '../mdk_protocol' # 0 () ('mdk_discovery',)
14
14
  require_relative '../quark' # 0 () ('mdk_discovery',)
15
15
 
16
16
 
@@ -21,17 +21,17 @@ def self.DiscoClientFactory; DiscoClientFactory; end
21
21
  #
22
22
 
23
23
  class DiscoClientFactory < ::DatawireQuarkCore::QuarkObject
24
- attr_accessor :token
24
+ attr_accessor :wsclient
25
25
  extend ::DatawireQuarkCore::Static
26
26
 
27
27
  static mdk_discovery_protocol_DiscoClientFactory_ref: -> { nil }
28
28
 
29
29
 
30
30
 
31
- def initialize(token)
31
+ def initialize(wsclient)
32
32
 
33
33
  self.__init_fields__
34
- (self).token = token
34
+ (self).wsclient = wsclient
35
35
 
36
36
  nil
37
37
  end
@@ -41,9 +41,7 @@ class DiscoClientFactory < ::DatawireQuarkCore::QuarkObject
41
41
 
42
42
  def create(subscriber, runtime)
43
43
 
44
- ddu = runtime.getEnvVarsService().var("MDK_DISCOVERY_URL")
45
- url = ddu.orElseGet("wss://discovery.datawire.io/ws/v1")
46
- return ::Quark.mdk_discovery.protocol.DiscoClient.new(subscriber, @token, url, runtime)
44
+ return ::Quark.mdk_discovery.protocol.DiscoClient.new(subscriber, @wsclient, runtime)
47
45
 
48
46
  nil
49
47
  end
@@ -64,8 +62,8 @@ class DiscoClientFactory < ::DatawireQuarkCore::QuarkObject
64
62
 
65
63
  def _getField(name)
66
64
 
67
- if ((name) == ("token"))
68
- return (self).token
65
+ if ((name) == ("wsclient"))
66
+ return (self).wsclient
69
67
  end
70
68
  return nil
71
69
 
@@ -74,8 +72,8 @@ class DiscoClientFactory < ::DatawireQuarkCore::QuarkObject
74
72
 
75
73
  def _setField(name, value)
76
74
 
77
- if ((name) == ("token"))
78
- (self).token = ::DatawireQuarkCore.cast(value) { ::String }
75
+ if ((name) == ("wsclient"))
76
+ (self).wsclient = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.WSClient }
79
77
  end
80
78
 
81
79
  nil
@@ -83,7 +81,7 @@ class DiscoClientFactory < ::DatawireQuarkCore::QuarkObject
83
81
 
84
82
  def __init_fields__()
85
83
 
86
- self.token = nil
84
+ self.wsclient = nil
87
85
 
88
86
  nil
89
87
  end
@@ -99,21 +97,22 @@ def self.DiscoClient; DiscoClient; end
99
97
  # Also supports registering discovery information with the server.
100
98
  #
101
99
 
102
- class DiscoClient < ::Quark.mdk_protocol.WSClient
103
- attr_accessor :_started, :_token, :_url, :_failurePolicyFactory, :_dispatcher, :_subscriber, :registered, :dlog
100
+ class DiscoClient < ::DatawireQuarkCore::QuarkObject
101
+ attr_accessor :_failurePolicyFactory, :_dispatcher, :_timeService, :_subscriber, :_wsclient, :registered, :dlog, :lastHeartbeat, :sock
104
102
  extend ::DatawireQuarkCore::Static
105
103
 
106
104
  static mdk_discovery_protocol_DiscoClient_ref: -> { nil }
107
105
 
108
106
 
109
107
 
110
- def initialize(subscriber, token, url, runtime)
108
+ def initialize(disco_subscriber, wsclient, runtime)
111
109
 
112
- super(runtime)
113
- (self)._subscriber = subscriber
110
+ self.__init_fields__
111
+ (self)._subscriber = disco_subscriber
112
+ (self)._wsclient = wsclient
113
+ (self)._wsclient.subscribe(self)
114
114
  (self)._failurePolicyFactory = ::DatawireQuarkCore.cast((runtime).dependencies.getService("failurepolicy_factory")) { ::Quark.mdk_discovery.FailurePolicyFactory }
115
- (self)._token = token
116
- (self)._url = url
115
+ (self)._timeService = runtime.getTimeService()
117
116
 
118
117
  nil
119
118
  end
@@ -124,49 +123,63 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
124
123
  def onStart(dispatcher)
125
124
 
126
125
  (self)._dispatcher = dispatcher
127
- (self)._started = true
128
- method(:onStart).super_method.call(dispatcher)
129
126
 
130
127
  nil
131
128
  end
132
129
 
133
130
  def onStop()
134
131
 
135
- (self)._started = false
136
- method(:onStop).super_method.call()
132
+ self.shutdown()
137
133
 
138
134
  nil
139
135
  end
140
136
 
141
137
  def onMessage(origin, message)
142
138
 
143
- if (((::Quark.quark.reflect.QuarkClass.get(::DatawireQuarkCore._getClass(message))).id) == ("mdk_discovery.RegisterNode"))
139
+ klass = (::Quark.quark.reflect.QuarkClass.get(::DatawireQuarkCore._getClass(message))).id
140
+ if ((klass) == ("mdk_discovery.RegisterNode"))
144
141
  register = ::DatawireQuarkCore.cast(message) { ::Quark.mdk_discovery.RegisterNode }
145
142
  self._register((register).node)
146
143
  return
147
144
  end
148
- method(:onMessage).super_method.call(origin, message)
145
+ ::Quark.mdk_protocol._subscriberDispatch(self, message)
149
146
 
150
147
  nil
151
148
  end
152
149
 
153
- def url()
150
+ def onMessageFromServer(message)
154
151
 
155
- return (self)._url
152
+ type = (::Quark.quark.reflect.QuarkClass.get(::DatawireQuarkCore._getClass(message))).id
153
+ if ((type) == ("mdk_discovery.protocol.Active"))
154
+ active = ::DatawireQuarkCore.cast(message) { ::Quark.mdk_discovery.protocol.Active }
155
+ self.onActive(active)
156
+ return
157
+ end
158
+ if ((type) == ("mdk_discovery.protocol.Expire"))
159
+ expire = ::DatawireQuarkCore.cast(message) { ::Quark.mdk_discovery.protocol.Expire }
160
+ self.onExpire(expire)
161
+ return
162
+ end
156
163
 
157
164
  nil
158
165
  end
159
166
 
160
- def token()
167
+ def onWSConnected(websocket)
161
168
 
162
- return (self)._token
169
+ (self).sock = websocket
170
+ self.heartbeat()
163
171
 
164
172
  nil
165
173
  end
166
174
 
167
- def isStarted()
175
+ def onPump()
168
176
 
169
- return (self)._started
177
+ rightNow = (((self)._timeService.time()) * (1000.0)).round()
178
+ heartbeatInterval = (((((self)._wsclient).ttl) / (2.0)) * (1000.0)).round()
179
+ if (((rightNow) - ((self).lastHeartbeat)) >= (heartbeatInterval))
180
+ (self).lastHeartbeat = rightNow
181
+ self.heartbeat()
182
+ end
170
183
 
171
184
  nil
172
185
  end
@@ -181,7 +194,7 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
181
194
  (@registered)[service] = (::Quark.mdk_discovery.Cluster.new((self)._failurePolicyFactory))
182
195
  end
183
196
  (@registered)[service].add(node)
184
- if (self.isConnected())
197
+ if ((self)._wsclient.isConnected())
185
198
  self.active(node)
186
199
  end
187
200
 
@@ -192,8 +205,8 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
192
205
 
193
206
  active = ::Quark.mdk_discovery.protocol.Active.new()
194
207
  (active).node = node
195
- (active).ttl = (self).ttl
196
- (self).dispatcher.tell(self, active.encode(), (self).sock)
208
+ (active).ttl = ((self)._wsclient).ttl
209
+ (self)._dispatcher.tell(self, active.encode(), (self).sock)
197
210
  @dlog.info(("active ") + (node.toString()))
198
211
 
199
212
  nil
@@ -203,7 +216,7 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
203
216
 
204
217
  expire = ::Quark.mdk_discovery.protocol.Expire.new()
205
218
  (expire).node = node
206
- (self).dispatcher.tell(self, expire.encode(), (self).sock)
219
+ (self)._dispatcher.tell(self, expire.encode(), (self).sock)
207
220
  @dlog.info(("expire ") + (node.toString()))
208
221
 
209
222
  nil
@@ -230,19 +243,8 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
230
243
  nil
231
244
  end
232
245
 
233
- def onClear(reset)
234
-
235
- nil
236
-
237
- nil
238
- end
239
-
240
- def startup()
241
-
242
- self.heartbeat()
243
-
244
- nil
245
- end
246
+ ##
247
+ # Send all registered services.
246
248
 
247
249
  def heartbeat()
248
250
 
@@ -278,17 +280,6 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
278
280
  nil
279
281
  end
280
282
 
281
- def onWSMessage(message)
282
-
283
- event = ::Quark.mdk_discovery.protocol.DiscoveryEvent.decode(message)
284
- if ((event) == (nil))
285
- return
286
- end
287
- event.dispatch(self)
288
-
289
- nil
290
- end
291
-
292
283
  def _getClass()
293
284
 
294
285
  return "mdk_discovery.protocol.DiscoClient"
@@ -298,72 +289,33 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
298
289
 
299
290
  def _getField(name)
300
291
 
301
- if ((name) == ("logger"))
302
- return (self).logger
303
- end
304
- if ((name) == ("firstDelay"))
305
- return (self).firstDelay
306
- end
307
- if ((name) == ("maxDelay"))
308
- return (self).maxDelay
309
- end
310
- if ((name) == ("reconnectDelay"))
311
- return (self).reconnectDelay
312
- end
313
- if ((name) == ("ttl"))
314
- return (self).ttl
315
- end
316
- if ((name) == ("tick"))
317
- return (self).tick
318
- end
319
- if ((name) == ("sock"))
320
- return (self).sock
321
- end
322
- if ((name) == ("sockUrl"))
323
- return (self).sockUrl
324
- end
325
- if ((name) == ("lastConnectAttempt"))
326
- return (self).lastConnectAttempt
327
- end
328
- if ((name) == ("lastHeartbeat"))
329
- return (self).lastHeartbeat
330
- end
331
- if ((name) == ("timeService"))
332
- return (self).timeService
333
- end
334
- if ((name) == ("schedulingActor"))
335
- return (self).schedulingActor
336
- end
337
- if ((name) == ("websockets"))
338
- return (self).websockets
339
- end
340
- if ((name) == ("dispatcher"))
341
- return (self).dispatcher
342
- end
343
- if ((name) == ("_started"))
344
- return (self)._started
345
- end
346
- if ((name) == ("_token"))
347
- return (self)._token
348
- end
349
- if ((name) == ("_url"))
350
- return (self)._url
351
- end
352
292
  if ((name) == ("_failurePolicyFactory"))
353
293
  return (self)._failurePolicyFactory
354
294
  end
355
295
  if ((name) == ("_dispatcher"))
356
296
  return (self)._dispatcher
357
297
  end
298
+ if ((name) == ("_timeService"))
299
+ return (self)._timeService
300
+ end
358
301
  if ((name) == ("_subscriber"))
359
302
  return (self)._subscriber
360
303
  end
304
+ if ((name) == ("_wsclient"))
305
+ return (self)._wsclient
306
+ end
361
307
  if ((name) == ("registered"))
362
308
  return (self).registered
363
309
  end
364
310
  if ((name) == ("dlog"))
365
311
  return (self).dlog
366
312
  end
313
+ if ((name) == ("lastHeartbeat"))
314
+ return (self).lastHeartbeat
315
+ end
316
+ if ((name) == ("sock"))
317
+ return (self).sock
318
+ end
367
319
  return nil
368
320
 
369
321
  nil
@@ -371,87 +323,48 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
371
323
 
372
324
  def _setField(name, value)
373
325
 
374
- if ((name) == ("logger"))
375
- (self).logger = value
376
- end
377
- if ((name) == ("firstDelay"))
378
- (self).firstDelay = ::DatawireQuarkCore.cast(value) { ::Float }
379
- end
380
- if ((name) == ("maxDelay"))
381
- (self).maxDelay = ::DatawireQuarkCore.cast(value) { ::Float }
382
- end
383
- if ((name) == ("reconnectDelay"))
384
- (self).reconnectDelay = ::DatawireQuarkCore.cast(value) { ::Float }
385
- end
386
- if ((name) == ("ttl"))
387
- (self).ttl = ::DatawireQuarkCore.cast(value) { ::Float }
388
- end
389
- if ((name) == ("tick"))
390
- (self).tick = ::DatawireQuarkCore.cast(value) { ::Float }
391
- end
392
- if ((name) == ("sock"))
393
- (self).sock = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.WSActor }
394
- end
395
- if ((name) == ("sockUrl"))
396
- (self).sockUrl = ::DatawireQuarkCore.cast(value) { ::String }
397
- end
398
- if ((name) == ("lastConnectAttempt"))
399
- (self).lastConnectAttempt = ::DatawireQuarkCore.cast(value) { ::Integer }
400
- end
401
- if ((name) == ("lastHeartbeat"))
402
- (self).lastHeartbeat = ::DatawireQuarkCore.cast(value) { ::Integer }
403
- end
404
- if ((name) == ("timeService"))
405
- (self).timeService = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.Time }
406
- end
407
- if ((name) == ("schedulingActor"))
408
- (self).schedulingActor = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.Actor }
409
- end
410
- if ((name) == ("websockets"))
411
- (self).websockets = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.WebSockets }
412
- end
413
- if ((name) == ("dispatcher"))
414
- (self).dispatcher = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.MessageDispatcher }
415
- end
416
- if ((name) == ("_started"))
417
- (self)._started = ::DatawireQuarkCore.cast(value) { ::Object }
418
- end
419
- if ((name) == ("_token"))
420
- (self)._token = ::DatawireQuarkCore.cast(value) { ::String }
421
- end
422
- if ((name) == ("_url"))
423
- (self)._url = ::DatawireQuarkCore.cast(value) { ::String }
424
- end
425
326
  if ((name) == ("_failurePolicyFactory"))
426
327
  (self)._failurePolicyFactory = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_discovery.FailurePolicyFactory }
427
328
  end
428
329
  if ((name) == ("_dispatcher"))
429
330
  (self)._dispatcher = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.MessageDispatcher }
430
331
  end
332
+ if ((name) == ("_timeService"))
333
+ (self)._timeService = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.Time }
334
+ end
431
335
  if ((name) == ("_subscriber"))
432
336
  (self)._subscriber = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.Actor }
433
337
  end
338
+ if ((name) == ("_wsclient"))
339
+ (self)._wsclient = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.WSClient }
340
+ end
434
341
  if ((name) == ("registered"))
435
342
  (self).registered = ::DatawireQuarkCore.cast(value) { ::Hash }
436
343
  end
437
344
  if ((name) == ("dlog"))
438
345
  (self).dlog = value
439
346
  end
347
+ if ((name) == ("lastHeartbeat"))
348
+ (self).lastHeartbeat = ::DatawireQuarkCore.cast(value) { ::Integer }
349
+ end
350
+ if ((name) == ("sock"))
351
+ (self).sock = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.Actor }
352
+ end
440
353
 
441
354
  nil
442
355
  end
443
356
 
444
357
  def __init_fields__()
445
358
 
446
- super
447
- self._started = false
448
- self._token = nil
449
- self._url = nil
450
359
  self._failurePolicyFactory = nil
451
360
  self._dispatcher = nil
361
+ self._timeService = nil
452
362
  self._subscriber = nil
363
+ self._wsclient = nil
453
364
  self.registered = ::Hash.new()
454
365
  self.dlog = ::Quark.quark._getLogger("discovery")
366
+ self.lastHeartbeat = 0
367
+ self.sock = nil
455
368
 
456
369
  nil
457
370
  end
@@ -460,147 +373,12 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
460
373
  end
461
374
  DiscoClient.unlazy_statics
462
375
 
463
- def self.DiscoHandler; DiscoHandler; end
464
- class DiscoHandler < ::DatawireQuarkCore::QuarkObject
465
- extend ::DatawireQuarkCore::Static
466
-
467
- static mdk_discovery_protocol_DiscoHandler_ref: -> { nil }
468
-
469
-
470
-
471
- def initialize()
472
- self.__init_fields__
473
-
474
- nil
475
- end
476
-
477
-
478
-
479
-
480
- def onActive(active)
481
- raise NotImplementedError, '`DiscoHandler.onActive` is an abstract method'
482
-
483
- nil
484
- end
485
-
486
- def onExpire(expire)
487
- raise NotImplementedError, '`DiscoHandler.onExpire` is an abstract method'
488
-
489
- nil
490
- end
491
-
492
- def onClear(reset)
493
- raise NotImplementedError, '`DiscoHandler.onClear` is an abstract method'
494
-
495
- nil
496
- end
497
-
498
- def __init_fields__()
499
-
500
-
501
- nil
502
- end
503
-
504
-
505
- end
506
- DiscoHandler.unlazy_statics
507
-
508
- def self.DiscoveryEvent; DiscoveryEvent; end
509
- class DiscoveryEvent < ::Quark.mdk_protocol.ProtocolEvent
510
- extend ::DatawireQuarkCore::Static
511
-
512
- static mdk_discovery_protocol_DiscoveryEvent_ref: -> { nil }
513
-
514
-
515
-
516
- def initialize()
517
-
518
- super()
519
-
520
- nil
521
- end
522
-
523
-
524
-
525
-
526
- def self.construct(type)
527
-
528
- result = ::Quark.mdk_protocol.ProtocolEvent.construct(type)
529
- if ((result) != (nil))
530
- return result
531
- end
532
- if (::Quark.mdk_discovery.protocol.Active._discriminator.matches(type))
533
- return ::Quark.mdk_discovery.protocol.Active.new()
534
- end
535
- if (::Quark.mdk_discovery.protocol.Expire._discriminator.matches(type))
536
- return ::Quark.mdk_discovery.protocol.Expire.new()
537
- end
538
- if (::Quark.mdk_discovery.protocol.Clear._discriminator.matches(type))
539
- return ::Quark.mdk_discovery.protocol.Clear.new()
540
- end
541
- return ::DatawireQuarkCore.cast(nil) { ::Quark.mdk_protocol.ProtocolEvent }
542
-
543
- nil
544
- end
545
-
546
- def self.decode(message)
547
-
548
- return ::DatawireQuarkCore.cast(::Quark.mdk_protocol.Serializable.decodeClassName("mdk_discovery.protocol.DiscoveryEvent", message)) { ::Quark.mdk_protocol.ProtocolEvent }
549
-
550
- nil
551
- end
552
-
553
- def dispatch(handler)
554
-
555
- self.dispatchDiscoveryEvent(::DatawireQuarkCore.cast(handler) { ::Quark.mdk_discovery.protocol.DiscoHandler })
556
-
557
- nil
558
- end
559
-
560
- def dispatchDiscoveryEvent(handler)
561
- raise NotImplementedError, '`DiscoveryEvent.dispatchDiscoveryEvent` is an abstract method'
562
-
563
- nil
564
- end
565
-
566
- def _getClass()
567
-
568
- return "mdk_discovery.protocol.DiscoveryEvent"
569
-
570
- nil
571
- end
572
-
573
- def _getField(name)
574
-
575
- return nil
576
-
577
- nil
578
- end
579
-
580
- def _setField(name, value)
581
-
582
- nil
583
-
584
- nil
585
- end
586
-
587
- def __init_fields__()
588
-
589
- super
590
-
591
- nil
592
- end
593
-
594
-
595
- end
596
- DiscoveryEvent.unlazy_statics
597
-
598
376
  def self.Active; Active; end
599
- class Active < ::Quark.mdk_discovery.protocol.DiscoveryEvent
377
+ class Active < ::Quark.mdk_protocol.Serializable
600
378
  attr_accessor :node, :ttl
601
379
  extend ::DatawireQuarkCore::Static
602
380
 
603
- static _discriminator: -> { ::Quark.mdk_protocol.anyof(::DatawireQuarkCore::List.new(["active", "discovery.protocol.Active"])) }
381
+ static _json_type: -> { "active" }
604
382
  static mdk_discovery_protocol_Active_ref: -> { nil }
605
383
 
606
384
 
@@ -615,13 +393,6 @@ class Active < ::Quark.mdk_discovery.protocol.DiscoveryEvent
615
393
 
616
394
 
617
395
 
618
- def dispatchDiscoveryEvent(handler)
619
-
620
- handler.onActive(self)
621
-
622
- nil
623
- end
624
-
625
396
  def _getClass()
626
397
 
627
398
  return "mdk_discovery.protocol.Active"
@@ -631,8 +402,8 @@ class Active < ::Quark.mdk_discovery.protocol.DiscoveryEvent
631
402
 
632
403
  def _getField(name)
633
404
 
634
- if ((name) == ("_discriminator"))
635
- return ::Quark.mdk_discovery.protocol.Active._discriminator
405
+ if ((name) == ("_json_type"))
406
+ return ::Quark.mdk_discovery.protocol.Active._json_type
636
407
  end
637
408
  if ((name) == ("node"))
638
409
  return (self).node
@@ -647,8 +418,8 @@ class Active < ::Quark.mdk_discovery.protocol.DiscoveryEvent
647
418
 
648
419
  def _setField(name, value)
649
420
 
650
- if ((name) == ("_discriminator"))
651
- ::Quark.mdk_discovery.protocol.Active._discriminator = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.Discriminator }
421
+ if ((name) == ("_json_type"))
422
+ ::Quark.mdk_discovery.protocol.Active._json_type = ::DatawireQuarkCore.cast(value) { ::String }
652
423
  end
653
424
  if ((name) == ("node"))
654
425
  (self).node = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_discovery.Node }
@@ -677,11 +448,11 @@ def self.Expire; Expire; end
677
448
  ##
678
449
  # Expire a node.
679
450
 
680
- class Expire < ::Quark.mdk_discovery.protocol.DiscoveryEvent
451
+ class Expire < ::Quark.mdk_protocol.Serializable
681
452
  attr_accessor :node
682
453
  extend ::DatawireQuarkCore::Static
683
454
 
684
- static _discriminator: -> { ::Quark.mdk_protocol.anyof(::DatawireQuarkCore::List.new(["expire", "discovery.protocol.Expire"])) }
455
+ static _json_type: -> { "expire" }
685
456
  static mdk_discovery_protocol_Expire_ref: -> { nil }
686
457
 
687
458
 
@@ -696,13 +467,6 @@ class Expire < ::Quark.mdk_discovery.protocol.DiscoveryEvent
696
467
 
697
468
 
698
469
 
699
- def dispatchDiscoveryEvent(handler)
700
-
701
- handler.onExpire(self)
702
-
703
- nil
704
- end
705
-
706
470
  def _getClass()
707
471
 
708
472
  return "mdk_discovery.protocol.Expire"
@@ -712,8 +476,8 @@ class Expire < ::Quark.mdk_discovery.protocol.DiscoveryEvent
712
476
 
713
477
  def _getField(name)
714
478
 
715
- if ((name) == ("_discriminator"))
716
- return ::Quark.mdk_discovery.protocol.Expire._discriminator
479
+ if ((name) == ("_json_type"))
480
+ return ::Quark.mdk_discovery.protocol.Expire._json_type
717
481
  end
718
482
  if ((name) == ("node"))
719
483
  return (self).node
@@ -725,8 +489,8 @@ class Expire < ::Quark.mdk_discovery.protocol.DiscoveryEvent
725
489
 
726
490
  def _setField(name, value)
727
491
 
728
- if ((name) == ("_discriminator"))
729
- ::Quark.mdk_discovery.protocol.Expire._discriminator = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.Discriminator }
492
+ if ((name) == ("_json_type"))
493
+ ::Quark.mdk_discovery.protocol.Expire._json_type = ::DatawireQuarkCore.cast(value) { ::String }
730
494
  end
731
495
  if ((name) == ("node"))
732
496
  (self).node = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_discovery.Node }
@@ -751,10 +515,10 @@ def self.Clear; Clear; end
751
515
  ##
752
516
  # Expire all nodes.
753
517
 
754
- class Clear < ::Quark.mdk_discovery.protocol.DiscoveryEvent
518
+ class Clear < ::Quark.mdk_protocol.Serializable
755
519
  extend ::DatawireQuarkCore::Static
756
520
 
757
- static _discriminator: -> { ::Quark.mdk_protocol.anyof(::DatawireQuarkCore::List.new(["clear", "discovery.protocol.Clear"])) }
521
+ static _json_type: -> { "clear" }
758
522
  static mdk_discovery_protocol_Clear_ref: -> { nil }
759
523
 
760
524
 
@@ -769,13 +533,6 @@ class Clear < ::Quark.mdk_discovery.protocol.DiscoveryEvent
769
533
 
770
534
 
771
535
 
772
- def dispatchDiscoveryEvent(handler)
773
-
774
- handler.onClear(self)
775
-
776
- nil
777
- end
778
-
779
536
  def _getClass()
780
537
 
781
538
  return "mdk_discovery.protocol.Clear"
@@ -785,8 +542,8 @@ class Clear < ::Quark.mdk_discovery.protocol.DiscoveryEvent
785
542
 
786
543
  def _getField(name)
787
544
 
788
- if ((name) == ("_discriminator"))
789
- return ::Quark.mdk_discovery.protocol.Clear._discriminator
545
+ if ((name) == ("_json_type"))
546
+ return ::Quark.mdk_discovery.protocol.Clear._json_type
790
547
  end
791
548
  return nil
792
549
 
@@ -795,8 +552,8 @@ class Clear < ::Quark.mdk_discovery.protocol.DiscoveryEvent
795
552
 
796
553
  def _setField(name, value)
797
554
 
798
- if ((name) == ("_discriminator"))
799
- ::Quark.mdk_discovery.protocol.Clear._discriminator = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.Discriminator }
555
+ if ((name) == ("_json_type"))
556
+ ::Quark.mdk_discovery.protocol.Clear._json_type = ::DatawireQuarkCore.cast(value) { ::String }
800
557
  end
801
558
 
802
559
  nil