home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / csbrokersn.tcl < prev    next >
Text File  |  1996-10-25  |  3KB  |  135 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1996
  4. #
  5. #      File:           @(#)csbrokersn.tcl    /main/hindenburg/11
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)csbrokersn.tcl    /main/hindenburg/11   25 Oct 1996 Copyright 1996 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. require csbrokerno.tcl
  13. # End user added include file section
  14.  
  15. require "csnode.tcl"
  16.  
  17. Class CSBrokersNode : {CSNode} {
  18.     constructor
  19.     method destructor
  20.     method childName
  21.     method childObjects
  22.     method createChild
  23.     method shutdown
  24.     method doUpdate
  25.     attribute brokerCount
  26.     attribute badBrokerCount
  27. }
  28.  
  29. constructor CSBrokersNode {class this name} {
  30.     set this [CSNode::constructor $class $this $name]
  31.     # Start constructor user section
  32.  
  33.     $this brokerCount 0
  34.     $this badBrokerCount 0
  35.  
  36.         $this label "<brokers>"
  37.         $this icon rep_brokers_16
  38.  
  39.         $this canShutdown 1
  40.  
  41.     # End constructor user section
  42.     return $this
  43. }
  44.  
  45. method CSBrokersNode::destructor {this} {
  46.     # Start destructor user section
  47.     # End destructor user section
  48.     $this CSNode::destructor
  49. }
  50.  
  51. method CSBrokersNode::childName {this object} {
  52.     return [$object name]
  53. }
  54.  
  55. method CSBrokersNode::childObjects {this} {
  56.     set goodBrokers {}
  57.     set badBrokerCount 0
  58.     set brokerCount 0
  59.  
  60.     set ns [ORB::nameServer]
  61.     foreach broker [$ns brokers] {
  62.     if ![catch {$broker host} error] {
  63.         lappend goodBrokers $broker
  64.     } else {
  65.             lappend brokerErrors $error
  66.         incr badBrokerCount
  67.     }
  68.     incr brokerCount
  69.     }
  70.  
  71.     $this brokerCount $brokerCount
  72.     $this badBrokerCount $badBrokerCount
  73.  
  74.     if [info exists brokerErrors] {
  75.     [$this view] warning "Could not access all brokers due to\
  76.                               errors:\n\n[join $brokerErrors "\n\n"]"
  77.     }
  78.     
  79.     return [osort name $goodBrokers]
  80. }
  81.  
  82. method CSBrokersNode::createChild {this object} {
  83.     return [CSBrokerNode new $this.[$this childName $object] $object]
  84. }
  85.  
  86. method CSBrokersNode::shutdown {this {confirm 1}} {
  87.     if $confirm {
  88.         $this confirmShutdown "Shutdown All Brokers" \
  89.             "Are you sure you want to shutdown all brokers?" shutdownBrokers
  90.         return
  91.     }
  92.  
  93.     # Shutdown all brokers.
  94.     #
  95.     set shutdownCount 0
  96.     set ns [ORB::nameServer]
  97.     set nsBroker [$ns broker]
  98.     set nsShutdown 0
  99.  
  100.     foreach broker [$ns brokers] {
  101.     if [catch {$broker shutdown} shutdownError] {
  102.         [$this view] error $shutdownError
  103.     } else {
  104.             incr shutdownCount
  105.  
  106.             # If name_server broker was shutdown, don't try to update,
  107.             # since that will time-out for sure.
  108.             #
  109.             if {$broker == $nsBroker} {
  110.                 set nsShutdown 1
  111.             }
  112.         }
  113.     }
  114.  
  115.     if $nsShutdown {
  116.         $this removeChildren
  117.     } elseif {$shutdownCount > 0} {
  118.         $this update 0
  119.     }
  120. }
  121.  
  122. method CSBrokersNode::doUpdate {this {rebuild 1}} {
  123.     $this CSNode::doUpdate $rebuild
  124.  
  125.     set info [$this info]
  126.     $info addHeader "Running Brokers"
  127.     $info addItem "Number of brokers" [$this brokerCount]
  128.     if {[$this badBrokerCount] > 0} {
  129.         $info addItem "Number of not responding brokers" [$this badBrokerCount]
  130.     }
  131. }
  132.  
  133. # Do not delete this line -- regeneration end marker
  134.  
  135.