#!/usr/local/ActivePerl-5.6/bin/perl -w use IO::Select; use IO::Socket; use Tk; use Tk::IO; use Tk::HList; use Config::IniFiles; use vars qw/$IMG_PARAMHOST $IMG_CAT $IMG_SUBCAT $IMG_PARAM $IMG_SUBPARAM/; use subs qw/lee_socket muestra_datos_host cierra_socket/; use strict; # use clntSara; my $SocketHandler; my $Socket_; my $ArchivoCfg = $ENV{MONICASRVINIFILE2}; my $cfgfile = new Config::IniFiles( -file => $ArchivoCfg ); die "Error al abrir $ArchivoCfg: $!" unless defined $cfgfile; my @Hosts = $cfgfile->Parameters("SRVMONICACFG"); my $NumHosts = $#Hosts; my $VentanaPrincipal = MainWindow->new; $VentanaPrincipal->configure(-title => "Configuracion de Servidor Monica", -background => 'blue'); my $FrameSup = $VentanaPrincipal->Frame(-relief => 'groove', -borderwidth => 3, -background => 'seagreen2', )->pack(-side => 'top', -fill => 'x'); my $Etiqueta = $FrameSup->Label(-text => $ArchivoCfg)->pack(-side => 'left'); $Etiqueta->pack; $Etiqueta->bind('' => sub { $VentanaPrincipal-> destroy }); my $FrameInt = $VentanaPrincipal->Frame(-relief => 'groove', -borderwidth => 3, -background => 'seagreen2', )->pack(-side => 'top', -fill => 'x'); my $Lista = $FrameInt->Scrolled(qw/Listbox -setgrid 1 -height 10 -scrollbars e/)->pack(qw/-side left -expand yes -fill both/); $Lista->focus; $Lista->bind('' => sub{ muestra_datos_host($_[0]->get('active')) }); $Lista->insert(0, @Hosts); $Lista->activate(0); my $FrameInf = $VentanaPrincipal->Frame(-relief => 'groove', -borderwidth => 3, -background => 'seagreen2', )->pack(-side => 'top', -fill => 'x'); my $ConfigDisplay = $FrameInf->Scrolled(qw\HList -separator | -selectmode extended -width 55 -height 20 -indent 35 -scrollbars se -itemtype imagetext\ )->grid(qw/-sticky nsew/); # $IMG_CAT = $VentanaPrincipal->Bitmap(-file => Tk->findINC('folder.xbm')); # $IMG_SUBCAT = $VentanaPrincipal->Bitmap(-file => Tk->findINC('file.xbm')); # $IMG_PARAMHOST = $VentanaPrincipal->Bitmap(-file => 'parametrohost.xbm'); $IMG_PARAMHOST = $VentanaPrincipal->Bitmap(-file => 'subparametro.xbm'); $IMG_CAT = $VentanaPrincipal->Bitmap(-file => 'categoria.xbm'); $IMG_SUBCAT = $VentanaPrincipal->Bitmap(-file => 'subcategoria.xbm'); $IMG_PARAM = $VentanaPrincipal->Bitmap(-file => 'parametro.xbm'); $IMG_SUBPARAM = $VentanaPrincipal->Bitmap(-file => 'subparametro.xbm'); MainLoop; sub muestra_datos_host { $ConfigDisplay->delete('all'); my $HostIniFileName = $cfgfile->val('SRVMONICACFG', $_[0]); my $HostIni = new Config::IniFiles( -file => $HostIniFileName ); die "Error al abrir $ArchivoCfg: $!" unless defined $HostIni; my @ParametrosHost = $HostIni->Parameters($_[0]); foreach my $ParametroHost(@ParametrosHost) { next if $ParametroHost eq 'CATEGORIAS'; my $Valor = $HostIni->val($_[0], $ParametroHost); $ConfigDisplay->add($ParametroHost, -text => $ParametroHost."=".$Valor, -image => $IMG_PARAMHOST, -data => $ParametroHost); } my @Categorias = $HostIni->val($_[0], 'CATEGORIAS'); foreach my $Categoria(@Categorias) { $ConfigDisplay->add($Categoria, -text => "$Categoria", -image => $IMG_CAT, -data => "CAT=$Categoria"); my @SubCategorias = $HostIni->val($Categoria, 'SUBCATEGORIAS'); foreach my $SubCategoria(@SubCategorias) { $ConfigDisplay->add("$Categoria|$SubCategoria", -text => "$SubCategoria", -image => $IMG_SUBCAT, -data => "CAT=$Categoria|SUB=$SubCategoria"); my @Parametros = $HostIni->Parameters($SubCategoria); foreach my $Parametro(@Parametros) { $ConfigDisplay->add("$Categoria|$SubCategoria|$Parametro", -text => "$Parametro", -image => $IMG_PARAM, -data => "CAT=$Categoria|SUB=$SubCategoria|PARAM=$Parametro"); my @SubParametros = $HostIni->val($SubCategoria, $Parametro); foreach my $SubParametro(@SubParametros) { $ConfigDisplay->add("$Categoria|$SubCategoria|$Parametro|$SubParametro", -text => "$SubParametro", -image => $IMG_SUBPARAM, -data => "CAT=$Categoria|SUB=$SubCategoria|PARAM=$Parametro|SUBPARAM=$SubParametro"); } } } } my $Mensaje = "CMD=LEE CAT=*"; # my $ProgramaClntSara = $cfgfile->val("CLNTSARA CONFIGURACION", 'PROGRAMACLIENTE'); my $SrvSaraIPAddress = gethostbyname(lc($_[0])); my $SrvSaraPort = $cfgfile->val("CLNTSARA CONFIGURACION", 'PUERTO'); $Socket_ = IO::Socket::INET->new(Proto => 'tcp', PeerAddr => inet_ntoa($SrvSaraIPAddress), PeerPort => $SrvSaraPort, # Listen => 10, Reuse => 'yes', # Type => SOCK_STREAM, Timeout => 10) or die "No se pudo crear conexion con $SrvSaraIPAddress: $!"; select((select($Socket_), $| = 1)[0]); print $Socket_ $Mensaje; $VentanaPrincipal->fileevent($Socket_, 'readable', [ \&lee_socket ]); # MainLoop; # $ConfigDisplay->add("CATEGORIA|SUBCATEGORIA", # -text => "cual", # -image => $IMG_SUBCAT, # -data => 'SUB'); # $VentanaPrincipal->fileevent(\*DELSOCKET, 'readable', [\&despliega_rmtsrv_conf]); # $SocketHandler = Tk::IO->new(-linecommand => \&lee_socket, # -childcommand => \&cierra_socket); # $SocketHandler->exec(sub { perl ./clntSara.pl excubitor \"CMD=LEE CAT=*\" }); } sub lee_socket { print "lee_socket\n"; my $conexion = $Socket_->accept(); my $mensaje; while( defined( my $buffer = <$Socket_> ) ) # read from the socket { print "From client: $buffer" ; $mensaje = $mensaje . $buffer ; } close($Socket_); } sub cierra_socket { print "cierra_socket\n"; }