datawire_mdk 2.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,101 @@
1
+ # Quark 1.0.406 run at 2016-08-31 13:21:53.028839
2
+ module Quark
3
+ require "quark"
4
+ def self.mdk_introspection; MdkIntrospection; end
5
+ module MdkIntrospection
6
+ def self.aws; Aws; end
7
+ module Aws
8
+ require "datawire-quark-core"
9
+ require_relative '../quark/reflect' # 0 ('quark',) ('mdk_introspection',)
10
+ require_relative '../mdk_introspection' # 0 () ('mdk_introspection',)
11
+ require_relative '../mdk_runtime' # 0 () ('mdk_introspection',)
12
+ require_relative '../datawire_mdk_md' # 0 () ('mdk_introspection',)
13
+
14
+
15
+ def self.Ec2Host; Ec2Host; end
16
+ class Ec2Host < ::DatawireQuarkCore::QuarkObject
17
+ attr_accessor :scope, :env
18
+ extend ::DatawireQuarkCore::Static
19
+
20
+ static mdk_introspection_aws_Ec2Host_ref: -> { nil }
21
+
22
+
23
+
24
+ def initialize(env, scope)
25
+
26
+ self.__init_fields__
27
+ (self).scope = (scope).upcase
28
+ (self).env = env
29
+
30
+ nil
31
+ end
32
+
33
+
34
+
35
+
36
+ def self.metadataHost(env)
37
+
38
+ return env.var("DATAWIRE_METADATA_HOST_OVERRIDE").orElseGet("169.254.169.254")
39
+
40
+ nil
41
+ end
42
+
43
+ def get()
44
+
45
+ if ((@scope) == ("INTERNAL"))
46
+ return ::DatawireQuarkCore.url_get((("http://") + (::Quark.mdk_introspection.aws.Ec2Host.metadataHost(@env))) + ("/latest/meta-data/local-hostname"))
47
+ end
48
+ if ((@scope) == ("PUBLIC"))
49
+ return ::DatawireQuarkCore.url_get((("http://") + (::Quark.mdk_introspection.aws.Ec2Host.metadataHost(@env))) + ("/latest/meta-data/public-hostname"))
50
+ end
51
+ return ::DatawireQuarkCore.cast(nil) { ::String }
52
+
53
+ nil
54
+ end
55
+
56
+ def _getClass()
57
+
58
+ return "mdk_introspection.aws.Ec2Host"
59
+
60
+ nil
61
+ end
62
+
63
+ def _getField(name)
64
+
65
+ if ((name) == ("scope"))
66
+ return (self).scope
67
+ end
68
+ if ((name) == ("env"))
69
+ return (self).env
70
+ end
71
+ return nil
72
+
73
+ nil
74
+ end
75
+
76
+ def _setField(name, value)
77
+
78
+ if ((name) == ("scope"))
79
+ (self).scope = ::DatawireQuarkCore.cast(value) { ::String }
80
+ end
81
+ if ((name) == ("env"))
82
+ (self).env = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.EnvironmentVariables }
83
+ end
84
+
85
+ nil
86
+ end
87
+
88
+ def __init_fields__()
89
+
90
+ self.scope = nil
91
+ self.env = nil
92
+
93
+ nil
94
+ end
95
+
96
+
97
+ end
98
+ Ec2Host.unlazy_statics
99
+ end # module Aws
100
+ end # module MdkIntrospection
101
+ end # module Quark
@@ -0,0 +1,125 @@
1
+ # Quark 1.0.406 run at 2016-08-31 13:21:53.028839
2
+ module Quark
3
+ require "quark"
4
+ def self.mdk_introspection; MdkIntrospection; end
5
+ module MdkIntrospection
6
+ def self.kubernetes; Kubernetes; end
7
+ module Kubernetes
8
+ require "datawire-quark-core"
9
+ require_relative '../quark/reflect' # 0 ('quark',) ('mdk_introspection',)
10
+ require_relative '../mdk_introspection' # 0 () ('mdk_introspection',)
11
+ require_relative '../datawire_mdk_md' # 0 () ('mdk_introspection',)
12
+
13
+
14
+ def self.KubernetesHost; KubernetesHost; end
15
+ class KubernetesHost < ::DatawireQuarkCore::QuarkObject
16
+ extend ::DatawireQuarkCore::Static
17
+
18
+ static mdk_introspection_kubernetes_KubernetesHost_ref: -> { nil }
19
+
20
+
21
+
22
+ def initialize()
23
+ self.__init_fields__
24
+
25
+ nil
26
+ end
27
+
28
+
29
+
30
+
31
+ def get()
32
+
33
+ return ::DatawireQuarkCore.cast(nil) { ::String }
34
+
35
+ nil
36
+ end
37
+
38
+ def _getClass()
39
+
40
+ return "mdk_introspection.kubernetes.KubernetesHost"
41
+
42
+ nil
43
+ end
44
+
45
+ def _getField(name)
46
+
47
+ return nil
48
+
49
+ nil
50
+ end
51
+
52
+ def _setField(name, value)
53
+
54
+ nil
55
+
56
+ nil
57
+ end
58
+
59
+ def __init_fields__()
60
+
61
+
62
+ nil
63
+ end
64
+
65
+
66
+ end
67
+ KubernetesHost.unlazy_statics
68
+
69
+ def self.KubernetesPort; KubernetesPort; end
70
+ class KubernetesPort < ::DatawireQuarkCore::QuarkObject
71
+ extend ::DatawireQuarkCore::Static
72
+
73
+ static mdk_introspection_kubernetes_KubernetesPort_ref: -> { nil }
74
+
75
+
76
+
77
+ def initialize()
78
+ self.__init_fields__
79
+
80
+ nil
81
+ end
82
+
83
+
84
+
85
+
86
+ def get()
87
+
88
+ return ::DatawireQuarkCore.cast(nil) { ::Integer }
89
+
90
+ nil
91
+ end
92
+
93
+ def _getClass()
94
+
95
+ return "mdk_introspection.kubernetes.KubernetesPort"
96
+
97
+ nil
98
+ end
99
+
100
+ def _getField(name)
101
+
102
+ return nil
103
+
104
+ nil
105
+ end
106
+
107
+ def _setField(name, value)
108
+
109
+ nil
110
+
111
+ nil
112
+ end
113
+
114
+ def __init_fields__()
115
+
116
+
117
+ nil
118
+ end
119
+
120
+
121
+ end
122
+ KubernetesPort.unlazy_statics
123
+ end # module Kubernetes
124
+ end # module MdkIntrospection
125
+ end # module Quark
@@ -0,0 +1,1255 @@
1
+ # Quark 1.0.406 run at 2016-08-31 13:21:53.028839
2
+ module Quark
3
+ require "quark"
4
+ def self.mdk_protocol; MdkProtocol; end
5
+ module MdkProtocol
6
+ require "datawire-quark-core"
7
+ require_relative 'quark/reflect' # 0 ('quark',) ()
8
+ require_relative 'datawire_mdk_md' # 0 () ()
9
+ require_relative 'quark' # 0 () ()
10
+ require_relative 'quark/concurrent' # 0 ('quark',) ()
11
+ require_relative 'mdk_runtime/actors' # 0 ('mdk_runtime',) ()
12
+ require_relative 'mdk_runtime' # 0 () ()
13
+ require_relative 'quark/error' # 0 ('quark',) ()
14
+
15
+
16
+ def self.Discriminator; Discriminator; end
17
+ class Discriminator < ::DatawireQuarkCore::QuarkObject
18
+ attr_accessor :values
19
+ extend ::DatawireQuarkCore::Static
20
+
21
+ static mdk_protocol_Discriminator_ref: -> { nil }
22
+
23
+
24
+
25
+ def initialize(values)
26
+
27
+ self.__init_fields__
28
+ (self).values = values
29
+
30
+ nil
31
+ end
32
+
33
+
34
+
35
+
36
+ def matches(value)
37
+
38
+ idx = 0
39
+ while ((idx) < ((@values).size)) do
40
+ if ((value) == ((@values)[idx]))
41
+ return true
42
+ end
43
+ idx = (idx) + (1)
44
+ end
45
+ return false
46
+
47
+ nil
48
+ end
49
+
50
+ def _getClass()
51
+
52
+ return "mdk_protocol.Discriminator"
53
+
54
+ nil
55
+ end
56
+
57
+ def _getField(name)
58
+
59
+ if ((name) == ("values"))
60
+ return (self).values
61
+ end
62
+ return nil
63
+
64
+ nil
65
+ end
66
+
67
+ def _setField(name, value)
68
+
69
+ if ((name) == ("values"))
70
+ (self).values = ::DatawireQuarkCore.cast(value) { ::DatawireQuarkCore::List }
71
+ end
72
+
73
+ nil
74
+ end
75
+
76
+ def __init_fields__()
77
+
78
+ self.values = nil
79
+
80
+ nil
81
+ end
82
+
83
+
84
+ end
85
+ Discriminator.unlazy_statics
86
+
87
+ def self.anyof(values)
88
+
89
+ return ::Quark.mdk_protocol.Discriminator.new(values)
90
+
91
+
92
+ nil
93
+ end
94
+
95
+ def self.Serializable; Serializable; end
96
+ class Serializable < ::DatawireQuarkCore::QuarkObject
97
+ extend ::DatawireQuarkCore::Static
98
+
99
+ static mdk_protocol_Serializable_ref: -> { nil }
100
+
101
+
102
+
103
+ def initialize()
104
+ self.__init_fields__
105
+
106
+ nil
107
+ end
108
+
109
+
110
+
111
+
112
+ ##
113
+ # The given class must have a construct() static method that takes the JSON-encoded type,
114
+ # or a constructor that takes no arguments.
115
+ #
116
+
117
+ def self.decodeClass(clazz, encoded)
118
+
119
+ json = ::DatawireQuarkCore::JSONObject.parse(encoded)
120
+ type = (json).getObjectItem("type").getString()
121
+ meth = clazz.getMethod("construct")
122
+ obj = nil
123
+ if ((meth) != (nil))
124
+ obj = ::DatawireQuarkCore.cast(meth.invoke(nil, ::DatawireQuarkCore::List.new([type]))) { ::Quark.mdk_protocol.Serializable }
125
+ if ((obj) == (nil))
126
+ logger = ::Quark.quark._getLogger("protocol")
127
+ logger.warn(((((clazz.getName()) + (".")) + (meth.getName())) + (" could not understand this json: ")) + (encoded))
128
+ return ::DatawireQuarkCore.cast(nil) { ::Quark.mdk_protocol.Serializable }
129
+ end
130
+ clazz = ::Quark.quark.reflect.QuarkClass.get(::DatawireQuarkCore._getClass(obj))
131
+ else
132
+ obj = ::DatawireQuarkCore.cast(clazz.construct(::DatawireQuarkCore::List.new([]))) { ::Quark.mdk_protocol.Serializable }
133
+ if ((obj) == (nil))
134
+ raise (((("could not construct ") + (clazz.getName())) + (" from this json: ")) + (encoded))
135
+ end
136
+ end
137
+ ::Quark.quark.fromJSON(clazz, obj, json)
138
+ return obj
139
+
140
+ nil
141
+ end
142
+
143
+ def self.decodeClassName(name, encoded)
144
+
145
+ return ::Quark.mdk_protocol.Serializable.decodeClass(::Quark.quark.reflect.QuarkClass.get(name), encoded)
146
+
147
+ nil
148
+ end
149
+
150
+ def encode()
151
+
152
+ clazz = ::Quark.quark.reflect.QuarkClass.get(::DatawireQuarkCore._getClass(self))
153
+ json = ::Quark.quark.toJSON(self, clazz)
154
+ desc = ::DatawireQuarkCore.cast((self)._getField("_discriminator")) { ::Quark.mdk_protocol.Discriminator }
155
+ if ((desc) != (nil))
156
+ (json).setObjectItem(("type"), (::DatawireQuarkCore::JSONObject.new.setString(((desc).values)[0])))
157
+ end
158
+ encoded = json.toString()
159
+ return encoded
160
+
161
+ nil
162
+ end
163
+
164
+ def _getClass()
165
+
166
+ return "mdk_protocol.Serializable"
167
+
168
+ nil
169
+ end
170
+
171
+ def _getField(name)
172
+
173
+ return nil
174
+
175
+ nil
176
+ end
177
+
178
+ def _setField(name, value)
179
+
180
+ nil
181
+
182
+ nil
183
+ end
184
+
185
+ def __init_fields__()
186
+
187
+
188
+ nil
189
+ end
190
+
191
+
192
+ end
193
+ Serializable.unlazy_statics
194
+
195
+ def self.LamportClock; LamportClock; end
196
+ ##
197
+ # A Lamport Clock is a logical structure meant to allow partial causal ordering. Ours is a list of
198
+ # integers such that adding an integer implies adding a new level to the causality tree.
199
+ #
200
+ # Within a level, time is indicated by incrementing the clock, so
201
+ #
202
+ # [1,2,3] comes before [1,2,4] which comes before [1,2,5]
203
+ #
204
+ # Adding an element to the clock implies causality, so [1,2,4,1-N] is _by definition_ a sequence that was
205
+ # _caused by_ the sequence of [1,2,1-3].
206
+ #
207
+ # Note that LamportClock is lowish-level support. SharedContext puts some more structure around this, too.
208
+ #
209
+
210
+ class LamportClock < ::Quark.mdk_protocol.Serializable
211
+ attr_accessor :_mutex, :clocks
212
+ extend ::DatawireQuarkCore::Static
213
+
214
+ static quark_List_quark_int__ref: -> { nil }
215
+ static mdk_protocol_LamportClock_ref: -> { nil }
216
+
217
+
218
+
219
+ def initialize()
220
+
221
+ super()
222
+
223
+ nil
224
+ end
225
+
226
+
227
+
228
+
229
+ def self.decode(encoded)
230
+
231
+ return ::DatawireQuarkCore.cast(::Quark.mdk_protocol.Serializable.decodeClassName("mdk_protocol.LamportClock", encoded)) { ::Quark.mdk_protocol.LamportClock }
232
+
233
+ nil
234
+ end
235
+
236
+ ##
237
+ # Return a neatly-formatted list of all of our clock elements (e.g. 1,2,4,1) for use as a name or
238
+ # a key.
239
+ #
240
+
241
+ def key()
242
+
243
+ @_mutex.acquire()
244
+ tmp = ::DatawireQuarkCore::List.new([])
245
+ i = 0
246
+ while ((i) < (((self).clocks).size)) do
247
+ (tmp) << ((((self).clocks)[i]).to_s)
248
+ i = (i) + (1)
249
+ end
250
+ str = (tmp).join(",")
251
+ @_mutex.release()
252
+ return str
253
+
254
+ nil
255
+ end
256
+
257
+ def toString()
258
+
259
+ @_mutex.acquire()
260
+ str = (("<LamportClock ") + (self.key())) + (">")
261
+ @_mutex.release()
262
+ return str
263
+
264
+ nil
265
+ end
266
+
267
+ ##
268
+ # Enter a new level of causality. Returns the value to pass to later pass to leave to get back to the
269
+ # current level of causality.
270
+ #
271
+
272
+ def enter()
273
+
274
+ @_mutex.acquire()
275
+ current = -(1)
276
+ ((self).clocks) << (0)
277
+ current = ((self).clocks).size
278
+ @_mutex.release()
279
+ return current
280
+
281
+ nil
282
+ end
283
+
284
+ ##
285
+ # Leave deeper levels of causality. popTo should be the value returned when you enter()d this level.
286
+ #
287
+
288
+ def leave(popTo)
289
+
290
+ @_mutex.acquire()
291
+ current = -(1)
292
+ (self).clocks = ::Quark.quark.ListUtil.new().slice((self).clocks, 0, popTo)
293
+ current = ((self).clocks).size
294
+ @_mutex.release()
295
+ return current
296
+
297
+ nil
298
+ end
299
+
300
+ ##
301
+ # Increment the clock for our current level of causality (which is always the last element in the list).
302
+ # If there are no elements in our clock, do nothing.
303
+ #
304
+
305
+ def tick()
306
+
307
+ @_mutex.acquire()
308
+ current = ((self).clocks).size
309
+ if ((current) > (0))
310
+ ((self).clocks)[(current) - (1)] = ((((self).clocks)[(current) - (1)]) + (1))
311
+ end
312
+ @_mutex.release()
313
+
314
+ nil
315
+ end
316
+
317
+ def _getClass()
318
+
319
+ return "mdk_protocol.LamportClock"
320
+
321
+ nil
322
+ end
323
+
324
+ def _getField(name)
325
+
326
+ if ((name) == ("_mutex"))
327
+ return (self)._mutex
328
+ end
329
+ if ((name) == ("clocks"))
330
+ return (self).clocks
331
+ end
332
+ return nil
333
+
334
+ nil
335
+ end
336
+
337
+ def _setField(name, value)
338
+
339
+ if ((name) == ("_mutex"))
340
+ (self)._mutex = ::DatawireQuarkCore.cast(value) { ::DatawireQuarkCore::Lock }
341
+ end
342
+ if ((name) == ("clocks"))
343
+ (self).clocks = ::DatawireQuarkCore.cast(value) { ::DatawireQuarkCore::List }
344
+ end
345
+
346
+ nil
347
+ end
348
+
349
+ def __init_fields__()
350
+
351
+ super
352
+ self._mutex = ::DatawireQuarkCore::Lock.new()
353
+ self.clocks = ::DatawireQuarkCore::List.new([])
354
+
355
+ nil
356
+ end
357
+
358
+
359
+ end
360
+ LamportClock.unlazy_statics
361
+
362
+ def self.SharedContext; SharedContext; end
363
+ class SharedContext < ::Quark.mdk_protocol.Serializable
364
+ attr_accessor :traceId, :clock, :properties, :_lastEntry
365
+ extend ::DatawireQuarkCore::Static
366
+
367
+ static mdk_protocol_SharedContext_ref: -> { nil }
368
+
369
+
370
+
371
+ def initialize()
372
+
373
+ super()
374
+ (self)._lastEntry = (self).clock.enter()
375
+
376
+ nil
377
+ end
378
+
379
+
380
+
381
+
382
+ ##
383
+ # Set the traceId for this SharedContext.
384
+
385
+ def withTraceId(traceId)
386
+
387
+ (self).traceId = traceId
388
+ return self
389
+
390
+ nil
391
+ end
392
+
393
+ def self.decode(encoded)
394
+
395
+ return ::DatawireQuarkCore.cast(::Quark.mdk_protocol.Serializable.decodeClassName("mdk_protocol.SharedContext", encoded)) { ::Quark.mdk_protocol.SharedContext }
396
+
397
+ nil
398
+ end
399
+
400
+ def clockStr(pfx)
401
+
402
+ cs = ""
403
+ if (((self).clock) != (nil))
404
+ cs = (pfx) + ((self).clock.key())
405
+ end
406
+ return cs
407
+
408
+ nil
409
+ end
410
+
411
+ def key()
412
+
413
+ return ((self).traceId) + (self.clockStr(":"))
414
+
415
+ nil
416
+ end
417
+
418
+ def toString()
419
+
420
+ return ((("<SCTX t:") + ((self).traceId)) + (self.clockStr(" c:"))) + (">")
421
+
422
+ nil
423
+ end
424
+
425
+ ##
426
+ # Tick the clock at our current causality level.
427
+ #
428
+
429
+ def tick()
430
+
431
+ (self).clock.tick()
432
+
433
+ nil
434
+ end
435
+
436
+ ##
437
+ # Return a SharedContext one level deeper in causality.
438
+ #
439
+ # NOTE WELL: THIS RETURNS A NEW SharedContext RATHER THAN MODIFYING THIS ONE. It is NOT SUPPORTED
440
+ # to modify the causality level of a SharedContext in place.
441
+ #
442
+
443
+ def start_span()
444
+
445
+ self.tick()
446
+ newContext = ::Quark.mdk_protocol.SharedContext.decode(self.encode())
447
+ (newContext)._lastEntry = (newContext).clock.enter()
448
+ return newContext
449
+
450
+ nil
451
+ end
452
+
453
+ ##
454
+ # Return a SharedContext one level higher in causality. In practice, most callers should probably stop
455
+ # using this context, and the new one, after calling this method.
456
+ #
457
+ # NOTE WELL: THIS RETURNS A NEW SharedContext RATHER THAN MODIFYING THIS ONE. It is NOT SUPPORTED
458
+ # to modify the causality level of a SharedContext in place.
459
+ #
460
+
461
+ def finish_span()
462
+
463
+ newContext = ::Quark.mdk_protocol.SharedContext.decode(self.encode())
464
+ (newContext)._lastEntry = (newContext).clock.leave((newContext)._lastEntry)
465
+ return newContext
466
+
467
+ nil
468
+ end
469
+
470
+ ##
471
+ # Return a copy of a SharedContext.
472
+
473
+ def copy()
474
+
475
+ return ::Quark.mdk_protocol.SharedContext.decode(self.encode())
476
+
477
+ nil
478
+ end
479
+
480
+ def _getClass()
481
+
482
+ return "mdk_protocol.SharedContext"
483
+
484
+ nil
485
+ end
486
+
487
+ def _getField(name)
488
+
489
+ if ((name) == ("traceId"))
490
+ return (self).traceId
491
+ end
492
+ if ((name) == ("clock"))
493
+ return (self).clock
494
+ end
495
+ if ((name) == ("properties"))
496
+ return (self).properties
497
+ end
498
+ if ((name) == ("_lastEntry"))
499
+ return (self)._lastEntry
500
+ end
501
+ return nil
502
+
503
+ nil
504
+ end
505
+
506
+ def _setField(name, value)
507
+
508
+ if ((name) == ("traceId"))
509
+ (self).traceId = ::DatawireQuarkCore.cast(value) { ::String }
510
+ end
511
+ if ((name) == ("clock"))
512
+ (self).clock = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.LamportClock }
513
+ end
514
+ if ((name) == ("properties"))
515
+ (self).properties = ::DatawireQuarkCore.cast(value) { ::Hash }
516
+ end
517
+ if ((name) == ("_lastEntry"))
518
+ (self)._lastEntry = ::DatawireQuarkCore.cast(value) { ::Integer }
519
+ end
520
+
521
+ nil
522
+ end
523
+
524
+ def __init_fields__()
525
+
526
+ super
527
+ self.traceId = ::Quark.quark.concurrent.Context.runtime().uuid()
528
+ self.clock = ::Quark.mdk_protocol.LamportClock.new()
529
+ self.properties = {}
530
+ self._lastEntry = 0
531
+
532
+ nil
533
+ end
534
+
535
+
536
+ end
537
+ SharedContext.unlazy_statics
538
+
539
+ def self.ProtocolHandler; ProtocolHandler; end
540
+ class ProtocolHandler < ::DatawireQuarkCore::QuarkObject
541
+ extend ::DatawireQuarkCore::Static
542
+
543
+ static mdk_protocol_ProtocolHandler_ref: -> { nil }
544
+
545
+
546
+
547
+ def initialize()
548
+ self.__init_fields__
549
+
550
+ nil
551
+ end
552
+
553
+
554
+
555
+
556
+ def onOpen(open)
557
+ raise NotImplementedError, '`ProtocolHandler.onOpen` is an abstract method'
558
+
559
+ nil
560
+ end
561
+
562
+ def onClose(close)
563
+ raise NotImplementedError, '`ProtocolHandler.onClose` is an abstract method'
564
+
565
+ nil
566
+ end
567
+
568
+ def __init_fields__()
569
+
570
+
571
+ nil
572
+ end
573
+
574
+
575
+ end
576
+ ProtocolHandler.unlazy_statics
577
+
578
+ def self.ProtocolEvent; ProtocolEvent; end
579
+ class ProtocolEvent < ::Quark.mdk_protocol.Serializable
580
+ extend ::DatawireQuarkCore::Static
581
+
582
+ static mdk_protocol_ProtocolEvent_ref: -> { nil }
583
+
584
+
585
+
586
+ def initialize()
587
+
588
+ super()
589
+
590
+ nil
591
+ end
592
+
593
+
594
+
595
+
596
+ def self.construct(type)
597
+
598
+ if (::Quark.mdk_protocol.Open._discriminator.matches(type))
599
+ return ::Quark.mdk_protocol.Open.new()
600
+ end
601
+ if (::Quark.mdk_protocol.Close._discriminator.matches(type))
602
+ return ::Quark.mdk_protocol.Close.new()
603
+ end
604
+ return ::DatawireQuarkCore.cast(nil) { ::Quark.mdk_protocol.ProtocolEvent }
605
+
606
+ nil
607
+ end
608
+
609
+ def dispatch(handler)
610
+ raise NotImplementedError, '`ProtocolEvent.dispatch` is an abstract method'
611
+
612
+ nil
613
+ end
614
+
615
+ def _getClass()
616
+
617
+ return "mdk_protocol.ProtocolEvent"
618
+
619
+ nil
620
+ end
621
+
622
+ def _getField(name)
623
+
624
+ return nil
625
+
626
+ nil
627
+ end
628
+
629
+ def _setField(name, value)
630
+
631
+ nil
632
+
633
+ nil
634
+ end
635
+
636
+ def __init_fields__()
637
+
638
+ super
639
+
640
+ nil
641
+ end
642
+
643
+
644
+ end
645
+ ProtocolEvent.unlazy_statics
646
+
647
+ def self.Open; Open; end
648
+ class Open < ::Quark.mdk_protocol.ProtocolEvent
649
+ attr_accessor :version, :properties
650
+ extend ::DatawireQuarkCore::Static
651
+
652
+ static _discriminator: -> { ::Quark.mdk_protocol.anyof(::DatawireQuarkCore::List.new(["open", "mdk.protocol.Open", "discovery.protocol.Open"])) }
653
+ static mdk_protocol_Open_ref: -> { nil }
654
+
655
+
656
+
657
+ def initialize()
658
+
659
+ super()
660
+
661
+ nil
662
+ end
663
+
664
+
665
+
666
+
667
+ def dispatch(handler)
668
+
669
+ handler.onOpen(self)
670
+
671
+ nil
672
+ end
673
+
674
+ def _getClass()
675
+
676
+ return "mdk_protocol.Open"
677
+
678
+ nil
679
+ end
680
+
681
+ def _getField(name)
682
+
683
+ if ((name) == ("_discriminator"))
684
+ return ::Quark.mdk_protocol.Open._discriminator
685
+ end
686
+ if ((name) == ("version"))
687
+ return (self).version
688
+ end
689
+ if ((name) == ("properties"))
690
+ return (self).properties
691
+ end
692
+ return nil
693
+
694
+ nil
695
+ end
696
+
697
+ def _setField(name, value)
698
+
699
+ if ((name) == ("_discriminator"))
700
+ ::Quark.mdk_protocol.Open._discriminator = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.Discriminator }
701
+ end
702
+ if ((name) == ("version"))
703
+ (self).version = ::DatawireQuarkCore.cast(value) { ::String }
704
+ end
705
+ if ((name) == ("properties"))
706
+ (self).properties = ::DatawireQuarkCore.cast(value) { ::Hash }
707
+ end
708
+
709
+ nil
710
+ end
711
+
712
+ def __init_fields__()
713
+
714
+ super
715
+ self.version = "2.0.0"
716
+ self.properties = {}
717
+
718
+ nil
719
+ end
720
+
721
+
722
+ end
723
+ Open.unlazy_statics
724
+
725
+ def self.ProtocolError; ProtocolError; end
726
+ ##
727
+ # A value class for sending error informationto a remote peer.
728
+
729
+ class ProtocolError < ::DatawireQuarkCore::QuarkObject
730
+ attr_accessor :code, :title, :detail, :id
731
+ extend ::DatawireQuarkCore::Static
732
+
733
+ static mdk_protocol_ProtocolError_ref: -> { nil }
734
+
735
+
736
+
737
+ def initialize()
738
+ self.__init_fields__
739
+
740
+ nil
741
+ end
742
+
743
+
744
+
745
+
746
+ def _getClass()
747
+
748
+ return "mdk_protocol.ProtocolError"
749
+
750
+ nil
751
+ end
752
+
753
+ def _getField(name)
754
+
755
+ if ((name) == ("code"))
756
+ return (self).code
757
+ end
758
+ if ((name) == ("title"))
759
+ return (self).title
760
+ end
761
+ if ((name) == ("detail"))
762
+ return (self).detail
763
+ end
764
+ if ((name) == ("id"))
765
+ return (self).id
766
+ end
767
+ return nil
768
+
769
+ nil
770
+ end
771
+
772
+ def _setField(name, value)
773
+
774
+ if ((name) == ("code"))
775
+ (self).code = ::DatawireQuarkCore.cast(value) { ::String }
776
+ end
777
+ if ((name) == ("title"))
778
+ (self).title = ::DatawireQuarkCore.cast(value) { ::String }
779
+ end
780
+ if ((name) == ("detail"))
781
+ (self).detail = ::DatawireQuarkCore.cast(value) { ::String }
782
+ end
783
+ if ((name) == ("id"))
784
+ (self).id = ::DatawireQuarkCore.cast(value) { ::String }
785
+ end
786
+
787
+ nil
788
+ end
789
+
790
+ def __init_fields__()
791
+
792
+ self.code = nil
793
+ self.title = nil
794
+ self.detail = nil
795
+ self.id = nil
796
+
797
+ nil
798
+ end
799
+
800
+
801
+ end
802
+ ProtocolError.unlazy_statics
803
+
804
+ def self.Close; Close; end
805
+ ##
806
+ # Close the event stream.
807
+
808
+ class Close < ::Quark.mdk_protocol.ProtocolEvent
809
+ attr_accessor :error
810
+ extend ::DatawireQuarkCore::Static
811
+
812
+ static _discriminator: -> { ::Quark.mdk_protocol.anyof(::DatawireQuarkCore::List.new(["close", "mdk.protocol.Close", "discovery.protocol.Close"])) }
813
+ static mdk_protocol_Close_ref: -> { nil }
814
+
815
+
816
+
817
+ def initialize()
818
+
819
+ super()
820
+
821
+ nil
822
+ end
823
+
824
+
825
+
826
+
827
+ def dispatch(handler)
828
+
829
+ handler.onClose(self)
830
+
831
+ nil
832
+ end
833
+
834
+ def _getClass()
835
+
836
+ return "mdk_protocol.Close"
837
+
838
+ nil
839
+ end
840
+
841
+ def _getField(name)
842
+
843
+ if ((name) == ("_discriminator"))
844
+ return ::Quark.mdk_protocol.Close._discriminator
845
+ end
846
+ if ((name) == ("error"))
847
+ return (self).error
848
+ end
849
+ return nil
850
+
851
+ nil
852
+ end
853
+
854
+ def _setField(name, value)
855
+
856
+ if ((name) == ("_discriminator"))
857
+ ::Quark.mdk_protocol.Close._discriminator = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.Discriminator }
858
+ end
859
+ if ((name) == ("error"))
860
+ (self).error = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.ProtocolError }
861
+ end
862
+
863
+ nil
864
+ end
865
+
866
+ def __init_fields__()
867
+
868
+ super
869
+ self.error = nil
870
+
871
+ nil
872
+ end
873
+
874
+
875
+ end
876
+ Close.unlazy_statics
877
+
878
+ def self.WSClient; WSClient; end
879
+ ##
880
+ # Common protocol machinery for web socket based protocol clients.
881
+
882
+ class WSClient < ::DatawireQuarkCore::QuarkObject
883
+ attr_accessor :logger, :firstDelay, :maxDelay, :reconnectDelay, :ttl, :tick, :sock, :sockUrl, :lastConnectAttempt, :lastHeartbeat, :timeService, :schedulingActor, :websockets, :dispatcher
884
+ extend ::DatawireQuarkCore::Static
885
+
886
+ static mdk_protocol_WSClient_ref: -> { nil }
887
+
888
+
889
+
890
+ def initialize(runtime)
891
+
892
+ self.__init_fields__
893
+ (self).dispatcher = (runtime).dispatcher
894
+ (self).timeService = runtime.getTimeService()
895
+ (self).schedulingActor = runtime.getScheduleService()
896
+ (self).websockets = runtime.getWebSocketsService()
897
+
898
+ nil
899
+ end
900
+
901
+
902
+
903
+
904
+ def url()
905
+ raise NotImplementedError, '`WSClient.url` is an abstract method'
906
+
907
+ nil
908
+ end
909
+
910
+ def token()
911
+ raise NotImplementedError, '`WSClient.token` is an abstract method'
912
+
913
+ nil
914
+ end
915
+
916
+ def isStarted()
917
+ raise NotImplementedError, '`WSClient.isStarted` is an abstract method'
918
+
919
+ nil
920
+ end
921
+
922
+ def isConnected()
923
+
924
+ return (@sock) != (nil)
925
+
926
+ nil
927
+ end
928
+
929
+ def schedule(time)
930
+
931
+ (self).dispatcher.tell(self, ::Quark.mdk_runtime.Schedule.new("wakeup", time), (self).schedulingActor)
932
+
933
+ nil
934
+ end
935
+
936
+ def scheduleReconnect()
937
+
938
+ self.schedule(@reconnectDelay)
939
+
940
+ nil
941
+ end
942
+
943
+ def onOpen(open)
944
+
945
+ nil
946
+
947
+ nil
948
+ end
949
+
950
+ def doBackoff()
951
+
952
+ @reconnectDelay = (2.0) * (@reconnectDelay)
953
+ if ((@reconnectDelay) > (@maxDelay))
954
+ @reconnectDelay = @maxDelay
955
+ end
956
+ @logger.info((("backing off, reconnecting in ") + ((@reconnectDelay).to_s)) + (" seconds"))
957
+
958
+ nil
959
+ end
960
+
961
+ def onClose(close)
962
+
963
+ @logger.info(("close: ") + ((close).to_s))
964
+ if (((close).error) == (nil))
965
+ @reconnectDelay = @firstDelay
966
+ else
967
+ self.doBackoff()
968
+ end
969
+
970
+ nil
971
+ end
972
+
973
+ def onStart(dispatcher)
974
+
975
+ self.schedule(0.0)
976
+
977
+ nil
978
+ end
979
+
980
+ def onStop()
981
+
982
+ if (self.isConnected())
983
+ self.shutdown()
984
+ (self).dispatcher.tell(self, ::Quark.mdk_runtime.WSClose.new(), @sock)
985
+ @sock = ::DatawireQuarkCore.cast(nil) { ::Quark.mdk_runtime.WSActor }
986
+ end
987
+
988
+ nil
989
+ end
990
+
991
+ def onMessage(origin, message)
992
+
993
+ typeId = (::Quark.quark.reflect.QuarkClass.get(::DatawireQuarkCore._getClass(message))).id
994
+ if ((typeId) == ("mdk_runtime.Happening"))
995
+ self.onScheduledEvent()
996
+ return
997
+ end
998
+ if ((typeId) == ("mdk_runtime.WSClosed"))
999
+ self.onWSClosed()
1000
+ return
1001
+ end
1002
+ if ((typeId) == ("mdk_runtime.WSMessage"))
1003
+ wsmessage = ::DatawireQuarkCore.cast(message) { ::Quark.mdk_runtime.WSMessage }
1004
+ self.onWSMessage((wsmessage).body)
1005
+ return
1006
+ end
1007
+
1008
+ nil
1009
+ end
1010
+
1011
+ def onScheduledEvent()
1012
+
1013
+ rightNow = (((self).timeService.time()) * (1000.0)).round()
1014
+ heartbeatInterval = (((@ttl) / (2.0)) * (1000.0)).round()
1015
+ reconnectInterval = ((@reconnectDelay) * (1000.0)).round()
1016
+ if (self.isConnected())
1017
+ if (self.isStarted())
1018
+ self.pump()
1019
+ if (((rightNow) - (@lastHeartbeat)) >= (heartbeatInterval))
1020
+ self.doHeartbeat()
1021
+ end
1022
+ end
1023
+ else
1024
+ if ((self.isStarted()) && (((rightNow) - (@lastConnectAttempt)) >= (reconnectInterval)))
1025
+ self.doOpen()
1026
+ end
1027
+ end
1028
+ if (self.isStarted())
1029
+ self.schedule(@tick)
1030
+ end
1031
+
1032
+ nil
1033
+ end
1034
+
1035
+ def doOpen()
1036
+
1037
+ self.open(self.url())
1038
+ @lastConnectAttempt = (((self).timeService.time()) * (1000.0)).round()
1039
+
1040
+ nil
1041
+ end
1042
+
1043
+ def doHeartbeat()
1044
+
1045
+ self.heartbeat()
1046
+ @lastHeartbeat = (((self).timeService.time()) * (1000.0)).round()
1047
+
1048
+ nil
1049
+ end
1050
+
1051
+ def open(url)
1052
+
1053
+ @sockUrl = url
1054
+ tok = self.token()
1055
+ if ((tok) != (nil))
1056
+ url = ((url) + ("?token=")) + (tok)
1057
+ end
1058
+ @logger.info(("opening ") + (@sockUrl))
1059
+ (self).websockets.connect(url, self).andEither(::Quark.quark._BoundMethod.new(self, "onWSConnected", ::DatawireQuarkCore::List.new([])), ::Quark.quark._BoundMethod.new(self, "onWSError", ::DatawireQuarkCore::List.new([])))
1060
+
1061
+ nil
1062
+ end
1063
+
1064
+ def startup()
1065
+
1066
+ nil
1067
+
1068
+ nil
1069
+ end
1070
+
1071
+ def pump()
1072
+
1073
+ nil
1074
+
1075
+ nil
1076
+ end
1077
+
1078
+ def heartbeat()
1079
+
1080
+ nil
1081
+
1082
+ nil
1083
+ end
1084
+
1085
+ def shutdown()
1086
+
1087
+ nil
1088
+
1089
+ nil
1090
+ end
1091
+
1092
+ def onWSMessage(message)
1093
+
1094
+ nil
1095
+
1096
+ nil
1097
+ end
1098
+
1099
+ def onWSConnected(socket)
1100
+
1101
+ @logger.info(((("connected to ") + (@sockUrl)) + (" via ")) + ((socket).to_s))
1102
+ @reconnectDelay = @firstDelay
1103
+ @sock = socket
1104
+ (self).dispatcher.tell(self, ::Quark.mdk_protocol.Open.new().encode(), @sock)
1105
+ self.startup()
1106
+ self.pump()
1107
+
1108
+ nil
1109
+ end
1110
+
1111
+ def onWSError(error)
1112
+
1113
+ @logger.error(("onWSError in protocol! ") + (error.toString()))
1114
+ self.doBackoff()
1115
+
1116
+ nil
1117
+ end
1118
+
1119
+ def onWSClosed()
1120
+
1121
+ @logger.info(("closed ") + (@sockUrl))
1122
+ @sock = ::DatawireQuarkCore.cast(nil) { ::Quark.mdk_runtime.WSActor }
1123
+
1124
+ nil
1125
+ end
1126
+
1127
+ def _getClass()
1128
+
1129
+ return "mdk_protocol.WSClient"
1130
+
1131
+ nil
1132
+ end
1133
+
1134
+ def _getField(name)
1135
+
1136
+ if ((name) == ("logger"))
1137
+ return (self).logger
1138
+ end
1139
+ if ((name) == ("firstDelay"))
1140
+ return (self).firstDelay
1141
+ end
1142
+ if ((name) == ("maxDelay"))
1143
+ return (self).maxDelay
1144
+ end
1145
+ if ((name) == ("reconnectDelay"))
1146
+ return (self).reconnectDelay
1147
+ end
1148
+ if ((name) == ("ttl"))
1149
+ return (self).ttl
1150
+ end
1151
+ if ((name) == ("tick"))
1152
+ return (self).tick
1153
+ end
1154
+ if ((name) == ("sock"))
1155
+ return (self).sock
1156
+ end
1157
+ if ((name) == ("sockUrl"))
1158
+ return (self).sockUrl
1159
+ end
1160
+ if ((name) == ("lastConnectAttempt"))
1161
+ return (self).lastConnectAttempt
1162
+ end
1163
+ if ((name) == ("lastHeartbeat"))
1164
+ return (self).lastHeartbeat
1165
+ end
1166
+ if ((name) == ("timeService"))
1167
+ return (self).timeService
1168
+ end
1169
+ if ((name) == ("schedulingActor"))
1170
+ return (self).schedulingActor
1171
+ end
1172
+ if ((name) == ("websockets"))
1173
+ return (self).websockets
1174
+ end
1175
+ if ((name) == ("dispatcher"))
1176
+ return (self).dispatcher
1177
+ end
1178
+ return nil
1179
+
1180
+ nil
1181
+ end
1182
+
1183
+ def _setField(name, value)
1184
+
1185
+ if ((name) == ("logger"))
1186
+ (self).logger = value
1187
+ end
1188
+ if ((name) == ("firstDelay"))
1189
+ (self).firstDelay = ::DatawireQuarkCore.cast(value) { ::Float }
1190
+ end
1191
+ if ((name) == ("maxDelay"))
1192
+ (self).maxDelay = ::DatawireQuarkCore.cast(value) { ::Float }
1193
+ end
1194
+ if ((name) == ("reconnectDelay"))
1195
+ (self).reconnectDelay = ::DatawireQuarkCore.cast(value) { ::Float }
1196
+ end
1197
+ if ((name) == ("ttl"))
1198
+ (self).ttl = ::DatawireQuarkCore.cast(value) { ::Float }
1199
+ end
1200
+ if ((name) == ("tick"))
1201
+ (self).tick = ::DatawireQuarkCore.cast(value) { ::Float }
1202
+ end
1203
+ if ((name) == ("sock"))
1204
+ (self).sock = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.WSActor }
1205
+ end
1206
+ if ((name) == ("sockUrl"))
1207
+ (self).sockUrl = ::DatawireQuarkCore.cast(value) { ::String }
1208
+ end
1209
+ if ((name) == ("lastConnectAttempt"))
1210
+ (self).lastConnectAttempt = ::DatawireQuarkCore.cast(value) { ::Integer }
1211
+ end
1212
+ if ((name) == ("lastHeartbeat"))
1213
+ (self).lastHeartbeat = ::DatawireQuarkCore.cast(value) { ::Integer }
1214
+ end
1215
+ if ((name) == ("timeService"))
1216
+ (self).timeService = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.Time }
1217
+ end
1218
+ if ((name) == ("schedulingActor"))
1219
+ (self).schedulingActor = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.Actor }
1220
+ end
1221
+ if ((name) == ("websockets"))
1222
+ (self).websockets = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.WebSockets }
1223
+ end
1224
+ if ((name) == ("dispatcher"))
1225
+ (self).dispatcher = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.MessageDispatcher }
1226
+ end
1227
+
1228
+ nil
1229
+ end
1230
+
1231
+ def __init_fields__()
1232
+
1233
+ self.logger = ::Quark.quark._getLogger("protocol")
1234
+ self.firstDelay = 1.0
1235
+ self.maxDelay = 16.0
1236
+ self.reconnectDelay = @firstDelay
1237
+ self.ttl = 30.0
1238
+ self.tick = 1.0
1239
+ self.sock = nil
1240
+ self.sockUrl = nil
1241
+ self.lastConnectAttempt = 0
1242
+ self.lastHeartbeat = 0
1243
+ self.timeService = nil
1244
+ self.schedulingActor = nil
1245
+ self.websockets = nil
1246
+ self.dispatcher = nil
1247
+
1248
+ nil
1249
+ end
1250
+
1251
+
1252
+ end
1253
+ WSClient.unlazy_statics
1254
+ end # module MdkProtocol
1255
+ end # module Quark