Class: Quark::MdkRuntime::Actors::MessageDispatcher
- Inherits:
-
DatawireQuarkCore::QuarkObject
- Object
- DatawireQuarkCore::QuarkObject
- Quark::MdkRuntime::Actors::MessageDispatcher
- Extended by:
- DatawireQuarkCore::Static
- Defined in:
- lib/mdk_runtime/actors.rb
Constant Summary
Constants included from DatawireQuarkCore::Static
DatawireQuarkCore::Static::Unassigned
Instance Attribute Summary collapse
-
#_delivering ⇒ Object
Returns the value of attribute _delivering.
-
#_lock ⇒ Object
Returns the value of attribute _lock.
-
#_queued ⇒ Object
Returns the value of attribute _queued.
-
#logger ⇒ Object
Returns the value of attribute logger.
Instance Method Summary collapse
- #__init_fields__ ⇒ Object
- #_callQueuedMessage(ignore, message) ⇒ Object
- #_getClass ⇒ Object
- #_getField(name) ⇒ Object
-
#_queue(inFlight) ⇒ Object
Queue a message for delivery.
- #_setField(name, value) ⇒ Object
-
#initialize ⇒ MessageDispatcher
constructor
A new instance of MessageDispatcher.
-
#startActor(actor) ⇒ Object
Start an Actor.
-
#stopActor(actor) ⇒ Object
Stop an Actor.
-
#tell(origin, message, destination) ⇒ Object
Queue a message from origin to destination, and trigger delivery if necessary.
Methods included from DatawireQuarkCore::Static
_lazy_statics, static, unlazy_statics
Methods inherited from DatawireQuarkCore::QuarkObject
Constructor Details
#initialize ⇒ MessageDispatcher
Returns a new instance of MessageDispatcher.
317 318 319 320 321 |
# File 'lib/mdk_runtime/actors.rb', line 317 def initialize() self.__init_fields__ nil end |
Instance Attribute Details
#_delivering ⇒ Object
Returns the value of attribute _delivering.
309 310 311 |
# File 'lib/mdk_runtime/actors.rb', line 309 def _delivering @_delivering end |
#_lock ⇒ Object
Returns the value of attribute _lock.
309 310 311 |
# File 'lib/mdk_runtime/actors.rb', line 309 def _lock @_lock end |
#_queued ⇒ Object
Returns the value of attribute _queued.
309 310 311 |
# File 'lib/mdk_runtime/actors.rb', line 309 def _queued @_queued end |
#logger ⇒ Object
Returns the value of attribute logger.
309 310 311 |
# File 'lib/mdk_runtime/actors.rb', line 309 def logger @logger end |
Instance Method Details
#__init_fields__ ⇒ Object
441 442 443 444 445 446 447 448 449 |
# File 'lib/mdk_runtime/actors.rb', line 441 def __init_fields__() self.logger = ::Quark.quark._getLogger("actors") self._queued = ::DatawireQuarkCore::List.new([]) self._delivering = false self._lock = ::DatawireQuarkCore::Lock.new() nil end |
#_callQueuedMessage(ignore, message) ⇒ Object
357 358 359 360 361 362 363 |
# File 'lib/mdk_runtime/actors.rb', line 357 def _callQueuedMessage(ignore, ) .deliver() return true nil end |
#_getClass ⇒ Object
397 398 399 400 401 402 |
# File 'lib/mdk_runtime/actors.rb', line 397 def _getClass() return "mdk_runtime.actors.MessageDispatcher" nil end |
#_getField(name) ⇒ Object
404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 |
# File 'lib/mdk_runtime/actors.rb', line 404 def _getField(name) if ((name) == ("logger")) return (self).logger end if ((name) == ("_queued")) return (self)._queued end if ((name) == ("_delivering")) return (self)._delivering end if ((name) == ("_lock")) return (self)._lock end return nil nil end |
#_queue(inFlight) ⇒ Object
Queue a message for delivery.
368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 |
# File 'lib/mdk_runtime/actors.rb', line 368 def _queue(inFlight) @logger.debug(("Queued ") + ((inFlight).to_s)) (self)._lock.acquire() ((self)._queued) << (inFlight) if ((self)._delivering) (self)._lock.release() return end (self)._delivering = true while ((((self)._queued).size) > (0)) do toDeliver = (self)._queued (self)._queued = ::DatawireQuarkCore::List.new([]) (self)._lock.release() idx = 0 while ((idx) < ((toDeliver).size)) do @logger.debug(("Delivering ") + (((toDeliver)[idx]).to_s)) deliver = ::Quark.quark._BoundMethod.new(self, "_callQueuedMessage", ::DatawireQuarkCore::List.new([(toDeliver)[idx]])) ::Quark.quark.concurrent.Context.runtime().callSafely(deliver, false) idx = (idx) + (1) end (self)._lock.acquire() end (self)._delivering = false (self)._lock.release() nil end |
#_setField(name, value) ⇒ Object
423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 |
# File 'lib/mdk_runtime/actors.rb', line 423 def _setField(name, value) if ((name) == ("logger")) (self).logger = value end if ((name) == ("_queued")) (self)._queued = ::DatawireQuarkCore.cast(value) { ::DatawireQuarkCore::List } end if ((name) == ("_delivering")) (self)._delivering = ::DatawireQuarkCore.cast(value) { ::Object } end if ((name) == ("_lock")) (self)._lock = ::DatawireQuarkCore.cast(value) { ::DatawireQuarkCore::Lock } end nil end |
#startActor(actor) ⇒ Object
Start an Actor.
340 341 342 343 344 345 |
# File 'lib/mdk_runtime/actors.rb', line 340 def startActor(actor) self._queue(::Quark.mdk_runtime.actors._StartStopActor.new(actor, self, true)) nil end |
#stopActor(actor) ⇒ Object
Stop an Actor.
350 351 352 353 354 355 |
# File 'lib/mdk_runtime/actors.rb', line 350 def stopActor(actor) self._queue(::Quark.mdk_runtime.actors._StartStopActor.new(actor, self, false)) nil end |
#tell(origin, message, destination) ⇒ Object
Queue a message from origin to destination, and trigger delivery if necessary.
329 330 331 332 333 334 335 |
# File 'lib/mdk_runtime/actors.rb', line 329 def tell(origin, , destination) inFlight = ::Quark.mdk_runtime.actors._InFlightMessage.new(origin, , destination) self._queue(inFlight) nil end |