~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Open Mash Cross Reference
mash/tcl/degas/degasclient/aglp.tcl

Component: ~ [ mash ] ~ [ apps ] ~ [ gsm ] ~ [ lib ] ~ [ otcl ] ~ [ srm ] ~ [ tcl8.3 ] ~ [ tclcl ] ~ [ tk8.3 ] ~ [ tutorials ] ~

  1 import AnnounceListenManager
  2 
  3 
  4 Class AGLP -superclass {AnnounceListenManager}
  5 
  6 AGLP public init { type group mtu } {
  7         $self instvar unique_port_ max_port_ min_port_
  8         $self instvar type_ 
  9         $self next $group $mtu
 10         set type_ $type
 11         $self set addr_ [localaddr]
 12         set min_port_ [$self get_option minPort]
 13         set max_port_ [$self get_option maxPort]
 14         set unique_port_ $min_port_
 15         load_delay
 16 }
 17 
 18 AGLP public send { msg } {
 19         $self announce "$msg\n"
 20 }
 21 
 22 proc print_delay {queue_time} {
 23         set now [gettimeofday]
 24         puts "A QUEUE [expr $now - $queue_time]"
 25 }
 26 
 27 AGLP public recv_announcement { addr post msg length } {
 28         $self recv $addr $post "$msg" $length"
 29 #       set delay [get_delay $addr]
 30 #       if {$delay != 0} {
 31 #               after [get_delay $addr] "$self recv $addr $post \"$msg\" $length"
 32 #       } else {
 33 #               $self recv $addr $post "$msg" $length"
 34 #       }
 35 }
 36 
 37 AGLP public debug { str } {
 38         if {[$self get_option debug] == 1} {
 39                 puts "$str"
 40         }
 41 }
 42 
 43 #------------------------------------------------------------------
 44 # AnnounceLinstenManager/DegasServer::generate_unique_port
 45 #
 46 # purpose : generate a unique port for the server. 
 47 # input   : none
 48 # output  : none
 49 #------------------------------------------------------------------
 50 
 51 AGLP private generate_unique_port {} {
 52     
 53     # Generate unique port number
 54     $self instvar unique_port_
 55     $self instvar port_in_use_
 56     $self instvar max_port_
 57     $self instvar min_port_
 58     incr unique_port_ 4
 59     set unique_port_ [expr ($unique_port_ % $max_port_) + $min_port_]
 60     while {[info exists port_in_use_($unique_port_)]} {
 61         incr unique_port_ 4
 62         set unique_port_ [expr ($unique_port_ % $max_port_) + $min_port_]
 63     }
 64     set port_in_use_($unique_port_) 1
 65     return $unique_port_
 66 }
 67 
 68 #------------------------------------------------------------------
 69 # AnnounceLinstenManager/DegasServer::generate_new_session_spec
 70 #
 71 # purpose : generate a unique multicast address and port for the
 72 #           outgoing session.  The multicast address will have 
 73 #           prefix 224.3
 74 # input   : none
 75 # output  : none
 76 #------------------------------------------------------------------
 77 
 78 AGLP private generate_new_session_spec {} {
 79     
 80     set port [$self generate_unique_port]
 81    
 82     # Generate unique multicast address.  Just generate a random number
 83     # between 2 and 251, and see if they are used.
 84     $self instvar addr_in_use_
 85         MashRNG seed [pid]
 86     set addr1 [expr ([MashRNG integer 250] + 2)]
 87     set addr2 [expr ([MashRNG integer 250] + 2)]
 88     while {[info exists addr_in_use_($addr1,$addr2)]} {
 89         set addr1 [expr ([MashRNG integer 250] + 2)]
 90         set addr2 [expr ([MashRNG integer 250] + 2)]
 91     }
 92     set addr_in_use_($addr1,$addr2) 1
 93 
 94     return 224.3.$addr1.$addr2/$port/[$self get_option ttl]
 95 }
 96 
 97 AGLP public recv_offer_service {addr args} { 
 98 }
 99 
100 AGLP public recv_serve {addr args} { 
101 }
102 
103 AGLP public recv_served_by {addr args} { 
104 }
105 
106 AGLP public recv_replace {addr args} { 
107 }
108 
109 AGLP public recv_handoff {addr args} { 
110 }
111 
112 AGLP public recv_handoff_ok {addr args} { 
113 }
114 
115 AGLP public recv_help_offer {addr args} { 
116 }
117 
118 AGLP public recv_accept_help {addr args} { 
119 }
120 
121 AGLP public time {} { 
122         return [expr [clock seconds] - 978535100]
123 }
124 
125 proc load_delay {} {
126         # delay_table is a list of <host_reg_exp delay> pair
127         # Note : cannot use array here since [array name] cannot 
128         # gurantee order of list.
129 
130         set f [open "~/.delays" r]
131         global delay_table
132         set data [read $f]
133         set hostname [lindex  [split [info hostname] .] 0]
134         foreach {host delay_table} $data {
135                 if {$host == $hostname} {
136                         return
137                 }
138         }
139 }
140 
141 
142 proc get_delay {addr} {
143         global delay_table
144         set hostname [lindex [split [lookup_host_name $addr] .] 0]
145         foreach {key value} $delay_table {
146                 if {[string match $key $addr] || [string match $key $hostname]} {
147 #                       puts "DELAY $addr $value"
148                         return $value
149                 }
150         }
151         return 0
152 }
153 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.