Documentation of the MyRouter tool used for route2.test
.
The MyRouter tool is used to test the routing-feature of rbmqmsgque.
To perform the test multiple classes are created and connected using the rbmqmsgque protocol.
The following class-hierarchie is used:
Base |----|----| WO1 WO2 WO3
The routing-test is perfomed by connecting multiple context.
|-> WO3#1 |-> WO2#1 -|-> WO3#2 client -> WO1 -| |-> W02#2 -|-> WO3#1 |-> WO3#2
All context created, 1x client and 7x server, are connected using the rbmqmsgque protocoll and build together a tree-like structure.
The GOAL for this setup is:
#+ #: @file NHI1/example/rb/MyRouter.rb #: @brief MyRouter.rb - 26 Jun 2024 - aotto1968 #: @copyright (C) NHI - #1 - Project - Group #: This software has NO permissions to copy, #: please contact AUTHOR for additional information #: @version 08a242faddae5101924d8fe811888e78892a82d9 #: @date Wed Jun 26 14:26:21 2024 +0200 #: @author aotto1968 <aotto1968@t-online.de> #: require "rbmqmsgque" include RbMsgque::MkKernel include RbMsgque::MqMsgque class Basic < MqContextC @@id1 = 11 @@id2 = 12 def initialize() super() end def CreateWorker(master_id, factory) SlaveWorker( master_id, factory, "--prefix", "cl#{factory}-#{master_id}", "@", \ "--prefix", "sv#{factory}-#{master_id}" \ ) end def HLWO Send("R", "C", ConfigGetName()) end def FOID Send("R", "C", "#{ClassOriginalIdentGet()}-#{LinkGetCtxId()}") end def PATH Send("R", "C", RouteGetPath()) end def TREE ; # private context, only callable by "self" Send("R", "L", RouteGetTree()) ; # answer the service-call using the "self" context end def HLWS(ctx) ; # public context, callable from every "ctx" Setup() ; # calling "setup" using the "self" context ctx.Send("R") ; # answer the service-call using the "ctx" context end def Setup ServiceCreate("HLWO",method(:HLWO)) ServiceCreate("FOID",method(:FOID)) ServiceCreate("PATH",method(:PATH)) ServiceCreate("TREE",method(:TREE)) ; # method is linked to "self" ServiceCreate("HLWS",method(:HLWS)) ; # method is linked to "self" end end class WO1 < Basic def initialize() super() ConfigSetServerSetup(method(:ServerSetup)) end def ServerSetup if LinkIsParent() CreateWorker(@@id1, "WO2") CreateWorker(@@id2, "WO2") end Setup() end end class WO2 < Basic def initialize() super() ConfigSetServerSetup(method(:ServerSetup)) end def ServerSetup if LinkIsParent() CreateWorker(@@id1, "WO3") CreateWorker(@@id2, "WO3") end Setup() end end class WO3 < Basic def initialize() super() ConfigSetServerSetup(method(:ServerSetup)) end def FINL Send("R", "C", "FINL-" + ConfigGetName()) end def ServerSetup Setup() ServiceCreate("FINL",method(:FINL)) end end # ------------------------------------------------------ # Main # create buffer-list of the application arguments largv = MkBufferListC.CreateLA(ARGV) # create the factories… MqFactoryC.Add(WO1).Default() MqFactoryC.Add(WO2) MqFactoryC.Add(WO3) # select factory using the !first! application argument # and create a new server srv = MqFactoryC.GetCalledL(largv).New() begin # configure and start the server srv.LinkCreate(largv) # start event-loop and wait forever srv.ProcessEvent(MqWaitOnEventE::FOREVER) rescue Exception => ex srv.ErrorCatch(ex) ensure srv.Exit() end