##################################################################################
##  .___  ___. ____    ____  ______     ______   
##  |   \/   | \   \  /   / /  __  \   /  __  \  
##  |  \  /  |  \   \/   / |  |  |  | |  |  |  | 
##  |  |\/|  |   \_    _/  |  |  |  | |  |  |  | 
##  |  |  |  |     |  |    |  `--'  | |  `--'  | 
##  |__|  |__|     |__|     \______/   \______/  
##                                               

# [server_example]
package require lib_85
package require atlmqmsgque

# package-item
::myooX::ClassN ::MyServer {
  SuperI ::MqContextC

  # service to serve all incoming requests for token "HLWO"
  proc myFirstService {myNs} {
    SendSTART $myNs
    SendSTR $myNs "[ReadSTR $myNs] World"
    SendRETURN $myNs
  }

  # define a service as link between the token "HLWO" and the callback "MyFirstService"
  proc serverSetup {myNs} {
    ServiceCreate $myNs "HLWO" myFirstService
  }

  # factory startup (constructor)
  proc MyServer {myNs {tmpl ""}} {
    MqContextC $myNs $tmpl
    ConfigSetServerSetup $myNs serverSetup
  }
} 

# package-main
MqMsgque::Main {

  # setup commandline arguments for later use
  set args  [MkBufferListC::CreateLA {*}$argv]

  # create "MyServer" factory... and make it to the default.
  set fct   [MqFactoryC::Default [MqFactoryC::Add ::MyServer]]

  # inspect commandline-argument for the "factory" to choose... and create a object
  set fct   [MqFactoryC::GetCalledL $args]
  set srv   [MqFactoryC::New $fct]

  try {
    MqContextC::LinkCreate $srv $args
    MqContextC::ProcessEvent $srv MQ_WAIT_FOREVER
  } on error {} {
    MqContextC::ErrorCatch $srv
  } finally {
    MqContextC::Exit $srv
  }
}
# [server_example]