- Timestamp:
- Dec 15, 2009, 1:42:15 PM (17 years ago)
- Branches:
- 1941-docker-image-to-test, devel, master
- Children:
- 8642d7e
- Parents:
- 71d0868
- Location:
- tolbase/lib/rmtps_client
- Files:
-
- 2 edited
-
rmtps_client.tcl (modified) (15 diffs)
-
rmtps_client.tol (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tolbase/lib/rmtps_client/rmtps_client.tcl
r71d0868 rbc98cf7 9 9 10 10 package provide rmtps_client 1.0 11 12 package require base64 13 14 if { [ catch { package require tlogger } ] } { 15 namespace eval tlogger { 16 variable _level "error" 17 18 proc init { svc {logfile ""} } { 19 } 20 21 proc level { svc l } { 22 variable _level $l 23 } 24 25 proc log { l msg } { 26 variable _level 27 28 if { $l eq $_level } { 29 puts $msg 30 } 31 } 32 } 33 } 11 34 12 35 ############################################################################### … … 38 61 # 39 62 variable mydir [file normalize [file dir [info script]]] 63 64 65 } 66 67 proc ::rmtps_client::init { {logfile ""} } { 68 ::tlogger::init rmtps_client $logfile 69 ::tlogger::level rmtps_client "error" 70 } 71 72 proc ::rmtps_client::log { level msg } { 73 74 ::tlogger::log rmtps_client $level $msg 40 75 } 41 76 … … 96 131 variable error_reason 97 132 133 log "debug" "wait_result $chan" 134 98 135 if {![eof $chan]} { 99 136 if {[gets $chan data] == -1} { 137 log "debug" "wait_result : incomplete data" 100 138 return; # only handle complete lines 101 139 } … … 106 144 fileevent $chan readable {} 107 145 set error_reason "end of channel from server" 146 log "warn" "wait_result : end of channel from server" 108 147 # Cancel vwait 109 148 # … … 116 155 # Return the data via the vwaited variable 117 156 # 157 log "debug" "wait_result read : $data" 118 158 set server_result $data 119 159 } … … 128 168 variable server_result 129 169 variable error_reason 170 171 log "debug" "handle_timeout $chan" 130 172 131 173 # Set result from server to empty to return from vwait … … 161 203 variable asking_error 162 204 205 log "debug" "enter ask_server $host $port $request" 206 163 207 # open channel to server 164 208 # … … 190 234 vwait ::rmtps_client::server_result 191 235 192 # if {$asking_error} {193 # set asking_error 0194 # } elseif {[string is integer $server_result] && $server_result==0} {195 # set asking_error 1196 # set error_reason [ask_server $host $port "LERROR"]197 # }198 236 catch {close $chan} 237 238 log "debug" "enter ask_server $host $port $server_result" 239 199 240 set server_result 200 241 } … … 218 259 proc ::rmtps_client::server_ping { host port } { 219 260 261 log "debug" "enter server_ping $host $port" 262 220 263 # send request to server 221 264 # 222 265 set ans [ask_server $host $port "PING"] 223 expr {$ans eq "RMTPS_SERVER WORKING"} 266 set result [expr {$ans eq "RMTPS_SERVER WORKING"}] 267 268 log "debug" "leave server_ping $host $port" 269 270 set result 224 271 } 225 272 … … 243 290 proc ::rmtps_client::ps_is_active { host port PID } { 244 291 292 log "debug" "enter ps_is_active $host $port $PID" 293 245 294 # send request to server 246 295 # 247 296 set result [ask_server $host $port "ALIVE $PID"] 248 # Answer from server must be an integer or boolean value 249 # 250 if {![string is integer $result] || ![string is boolean $result]} { 297 298 log "debug" "from ask_server = '$result'" 299 300 # Answer from server must be an integer value 301 # 302 if { $result eq "" || ![string is integer $result] || 303 ![string is boolean $result] } { 251 304 set result -1 252 305 } else { … … 255 308 set result [expr {!!$result}] 256 309 } 310 311 log "debug" "leave ps_is_active $host $port $PID : $result" 312 313 set result 257 314 } 258 315 … … 277 334 ############################################################################### 278 335 proc ::rmtps_client::ps_kill { host port PID } { 336 337 log "debug" "enter ps_kill $host $port $PID" 279 338 280 339 # send request to server … … 288 347 # Make sure 0, 1 or -1 is returned 289 348 # 290 expr {$result==-1?-1:$result!=0} 291 } 349 set result [expr {$result==-1?-1:$result!=0}] 350 } 351 352 log "debug" "leave ps_kill $host $port $PID : $result" 353 354 set result 292 355 } 293 356 … … 310 373 proc ::rmtps_client::ps_run { host port cmdline } { 311 374 375 log "debug" "enter ps_run $host $port $cmdline" 376 312 377 # send request to server 313 378 # … … 318 383 set result 0 319 384 } 385 386 log "debug" "leave ps_run $host $port $cmdline : $result" 387 388 set result 389 } 390 391 392 ############################################################################### 393 # 394 # ps_runtol -- execute a TOL process on a remote host 395 # 396 # Arguments -- 397 # 398 # host - computer (remote host) where RmtPS_Server is running 399 # port - port where the server socket is listening 400 # cmdln_args - TOL arguments 401 # 402 # Return -- 403 # 404 # PID of the process if cmdline could be executed 405 # 0 if the command line could not be executed 406 # 407 ############################################################################### 408 proc ::rmtps_client::ps_runtol { host port cmdln_args } { 409 410 log "debug" "enter ps_runtol $host $port $cmdln_args" 411 412 # send request to server 413 # 414 set cmdln64 [ base64::encode -wrapchar "" $cmdln_args ] 415 #set cmdln64 $cmdln_args 416 set result [ask_server $host $port "RUNTOL $cmdln64"] 417 # Make sure that 0 or PID>0 is returned 418 # 419 if {![string is integer $result] || $result<0} { 420 set result 0 421 } 422 423 log "debug" "leave ps_runtol $host $port $cmdln_args : $result" 424 320 425 set result 321 426 } -
tolbase/lib/rmtps_client/rmtps_client.tol
r71d0868 rbc98cf7 10 10 * Argumentos: 11 11 * 12 * Host: 13 * Port: 12 * Host: host que aloja al servidor RMTPS 13 * 14 * Port: puerto donde el servidor RMPTS esta escuchando 14 15 * 15 16 * Resultado: … … 37 38 * Argumentos: 38 39 * 39 * Host: 40 * Port: 40 * Host: host que aloja al servidor RMTPS 41 * 42 * Port: puerto donde el servidor RMPTS esta escuchando 43 * 41 44 * CmdLine: 42 45 * … … 65 68 66 69 /** 70 * RemoteTOL -- Invoca un proceso TOL remoto 71 * 72 * Argumentos: 73 * 74 * Host: host que aloja al servidor RMTPS 75 * 76 * Port: puerto donde el servidor RMPTS esta escuchando 77 * 78 * Args: 79 * 80 * Resultado: 81 * 82 * PID del proceso TOL lanzado o 0 si algun error ha ocurrido 83 * 84 */ 85 Real RemoteTOL(Text Host, Real Port, Set Args ) 86 { 87 88 Text cmd = "::rmtps_client::ps_runtol"; 89 Text port = FormatReal(Port, "%.0lf"); 90 Text project = Args[ 1 ]; 91 Set tolargs = Args[ 2 ]; 92 Set cmdln_args = If( project=="", Copy( Empty ), 93 [[ "-project", project ]] ); 94 Set EvalSet( tolargs, Real( Set item ) { 95 Text type = Name( item[ 1 ] ); 96 Case( type=="expr", { 97 Set Append( cmdln_args, [[ "-expr", item[ 1 ] ]] ); 98 Real 0 99 }, 100 type=="file", { 101 Real idx_rel = FindIndexByName( item, "relative" ); 102 Set Append( cmdln_args, 103 If( idx_rel, { 104 Set [[ "-relative", item[ idx_rel ], 105 "-file", item[ 1 ] ]] 106 }, { 107 Set [[ "-file", item[ 1 ] ]] 108 } ) ); 109 Real 0 110 } , 111 1, { 112 Warning( "RemoteTOL: tipo de elemento desconocido '" 113 + type + "' debe " 114 "ser 'expr' o 'file'" ); 115 Real 0 116 } ); 117 Real 0 118 } ); 119 Set tcl_args = [[ cmd, host, port ]] << [[ cmdln_args ]]; 120 //Set View( tcl_args, "Std" ); 121 Set result = Tcl_EvalEx( tcl_args ); 122 Real If(result["status"], Eval(result["result"]),{ 123 WriteLn("RemoteTOL: "+result["result"],"E"); 124 Real 0 125 }) 126 }; 127 PutDescription("Ejecuta en proceso TOL remoto. Args es un conjunto con los " 128 "argumentos a pasar a TOL en la linea de comandos.\n" 129 "Los elementos de Args son interpretados por el servidor de " 130 "procesos TOL y se traducen en argumentos de linea de comandos " 131 "al proceso TOL que se invoca. Los argumentos son:\n" 132 "\tText project = nombre del proyecto que se cargara\n" 133 "\tSet tolargs = conjunto de elementos a evaluar.\n" 134 "El conjunto tolargs contiene expresiones TOL o archivos a " 135 "evaluar en la linea de comandos. Cada uno de los " 136 "elementos es un conjunto con los siguientes elementos con " 137 "nombre:\n" 138 "\tText tolargs[1] : contiene la expresion o el nombre del " 139 "\tarchivo a evaluar. El nombre de tolargs[1] debe ser expr o " 140 "\tfile. Si el nombre es expr el valor se considera una " 141 "\texpresion TOL. Si el nombre es file el valor se considera " 142 "\tel nombre de un archivo a evaluar." 143 "\tText relative = nombre de proyecto respecto al cual se " 144 "\tcargara el archivo TOL. Este campo es opcional y solo se " 145 "\tconsidera cuando el tolargs[1] es un archivo. Por omision " 146 "\tel archivo se toma trelativo al argumento project.\n\n" 147 "Retorna el PID del proceso TOL ejecutado o 0 si algun error " 148 "ocurrio durante el intento de ejecucion. " 149 "Necesita que un servidor RmtPS_Server este escuchando en el " 150 "puerto Port del ordenador Host", 151 RemoteTOL); 152 153 /** 67 154 * RemoteAlive -- Verifica, en remoto, si un proceso continua vivo 68 155 * 69 156 * Argumentos: 157 * 158 * Host: host que aloja al servidor RMTPS 159 * 160 * Port: puerto donde el servidor RMPTS esta escuchando 70 161 * 71 162 * Host: … … 108 199 * Argumentos: 109 200 * 201 * Host: host que aloja al servidor RMTPS 202 * 203 * Port: puerto donde el servidor RMPTS esta escuchando 204 * 110 205 * Host: 111 206 * Port:
Note: See TracChangeset
for help on using the changeset viewer.
