desarrollosconsejeria/adtos-server/1.7-0/adtos/inicio.pas @ 23a384b9
23a384b9 | Elisa | {
|
|
Adtos 1.0 Software de gestión de Aulas Tecnológicas
|
|||
Programación: Manuel Narváez Martínez <mnarvaez007@gmail.com>
|
|||
Diseño gráfico: Ana María Zamora Moreno
|
|||
Desarrollado con Lazarus 0.9.26
|
|||
This program is free software; you can redistribute it and/or modify
|
|||
it under the terms of the GNU General Public License as published by
|
|||
the Free Software Foundation; either version 2 of the License, or
|
|||
(at your option) any later version.
|
|||
This program is distributed in the hope that it will be useful,
|
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|||
GNU General Public License for more details.
|
|||
You should have received a copy of the GNU General Public License
|
|||
along with this program; if not, write to the Free Software
|
|||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|||
}
|
|||
unit inicio;
|
|||
{$mode objfpc}{$H+}
|
|||
interface
|
|||
uses
|
|||
LCLType, IniFiles, textomensajes, globales, globales1, Classes, SysUtils,
|
|||
LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls, Menus, StdCtrls,
|
|||
Buttons, EditBtn, ComCtrls, RTTICtrls, ColorProgress, IdCmdTCPServer,
|
|||
IdCommandHandlers, IdSync, IdCustomTCPServer, IdTCPClient, HTTPDefs;
|
|||
type
|
|||
THallarResultadoProcesoSync = class(TIdSync)
|
|||
protected
|
|||
fhost,fcodigo,fip,frespuesta:string;
|
|||
fnumEquipo:integer;
|
|||
procedure DoSynchronize; override;
|
|||
public
|
|||
constructor Create(codigo,ip, host, respuesta: string;numEquipo:integer);
|
|||
class procedure add(codigo,ip, host, respuesta: string;numEquipo:integer);
|
|||
end;
|
|||
{ TfrmMain }
|
|||
TfrmMain = class(TForm)
|
|||
btnAceptar: TButton;
|
|||
btnAndar: TButton;
|
|||
btnGuardar: TButton;
|
|||
btnCerrar: TButton;
|
|||
btnParar: TButton;
|
|||
btnBuscar: TButton;
|
|||
btnTodos: TButton;
|
|||
btnReintentarTodos: TButton;
|
|||
cboIntervaloP6: TComboBox;
|
|||
cboIntervaloP7: TComboBox;
|
|||
deCarpetas: TDirectoryEdit;
|
|||
deCarpetasRoot: TDirectoryEdit;
|
|||
edAsuMen: TEdit;
|
|||
edCarpetaDestino: TEdit;
|
|||
edComando: TEdit;
|
|||
edPassword: TEdit;
|
|||
dlBuscar: TFindDialog;
|
|||
fnArchivo: TFileNameEdit;
|
|||
fnArchivoRoot: TFileNameEdit;
|
|||
fnScript: TFileNameEdit;
|
|||
Image1: TImage;
|
|||
Image2: TImage;
|
|||
imgFondoPrincipal: TImage;
|
|||
imlIcoAct1: TImageList;
|
|||
imgIco: TImage;
|
|||
imldisabled: TImageList;
|
|||
imlEncender: TImageList;
|
|||
imlLogos: TImageList;
|
|||
imlIcoIna: TImageList;
|
|||
imlmenu: TImageList;
|
|||
imlIcoDis: TImageList;
|
|||
imgPresentacion: TImage;
|
|||
Label1: TLabel;
|
|||
Label71: TLabel;
|
|||
lblInfoProScrip: TLabel;
|
|||
lblProScript: TLabel;
|
|||
lblRevInicio: TLabel;
|
|||
Label70: TLabel;
|
|||
lblGrupo: TLabel;
|
|||
lblTiempoProceso1: TLabel;
|
|||
lblAccionEjecutada: TLabel;
|
|||
lblTiempoProceso: TLabel;
|
|||
lblInfoEnviar: TLabel;
|
|||
lblEnviar: TLabel;
|
|||
Label69: TLabel;
|
|||
lblHost: TLabel;
|
|||
Label22: TLabel;
|
|||
Label3: TLabel;
|
|||
Label32: TLabel;
|
|||
Label4: TLabel;
|
|||
Label57: TLabel;
|
|||
Label58: TLabel;
|
|||
Label59: TLabel;
|
|||
Label66: TLabel;
|
|||
Label67: TLabel;
|
|||
Label7: TLabel;
|
|||
Label82: TLabel;
|
|||
Label83: TLabel;
|
|||
lblInfo: TLabel;
|
|||
lblIP: TLabel;
|
|||
lblMAC: TLabel;
|
|||
lstComandos: TListBox;
|
|||
lstProcesos: TListBox;
|
|||
MenuItem6: TMenuItem;
|
|||
meProceso1: TMemo;
|
|||
meScript: TMemo;
|
|||
mnuRepetir: TMenuItem;
|
|||
mnuConfigurarImpresora: TMenuItem;
|
|||
mnuResultados: TMenuItem;
|
|||
mnuConfigurarGrupos: TMenuItem;
|
|||
mnuRestaurar: TMenuItem;
|
|||
MenuItem12: TMenuItem;
|
|||
mnuGrups: TMenuItem;
|
|||
mnuGrupos1: TMenuItem;
|
|||
MenuItem9: TMenuItem;
|
|||
MenuItem1: TMenuItem;
|
|||
MenuItem2: TMenuItem;
|
|||
MenuItem3: TMenuItem;
|
|||
mnuCursos: TMenuItem;
|
|||
MenuItem4: TMenuItem;
|
|||
MenuItem5: TMenuItem;
|
|||
mnuSalir1: TMenuItem;
|
|||
mnuMapa: TMenuItem;
|
|||
mnuCentro: TMenuItem;
|
|||
mnuAula: TMenuItem;
|
|||
mnuContra: TMenuItem;
|
|||
mnuTerminal: TMenuItem;
|
|||
mnuArchivoRoot: TMenuItem;
|
|||
mnuComandoRoot: TMenuItem;
|
|||
mnuConsulta: TMenuItem;
|
|||
menuAula: TMainMenu;
|
|||
Calculadora1: TMenuItem;
|
|||
meTexArc: TMemo;
|
|||
meCarpertas: TMemo;
|
|||
Administrador1: TMenuItem;
|
|||
meTexMen: TMemo;
|
|||
mnuAcercade: TMenuItem;
|
|||
mnuNot: TMenuItem;
|
|||
OpenDialog1: TOpenDialog;
|
|||
OpenDialog3: TOpenDialog;
|
|||
Panel1: TPanel;
|
|||
pnArcRoot: TPanel;
|
|||
pnComandos: TPanel;
|
|||
pnPrioridad: TPanel;
|
|||
pnEnc: TPanel;
|
|||
pnMen: TPanel;
|
|||
pnRec: TPanel;
|
|||
pnArc: TPanel;
|
|||
pnCar: TPanel;
|
|||
pnFondo: TPanel;
|
|||
pnTodos: TPanel;
|
|||
poRepetir: TPopupMenu;
|
|||
poAula: TPopupMenu;
|
|||
RadioButton1: TRadioButton;
|
|||
RadioButton2: TRadioButton;
|
|||
rbComando: TRadioButton;
|
|||
rbConsulta: TRadioButton;
|
|||
rbCopias: TRadioButton;
|
|||
RadioButton4: TRadioButton;
|
|||
rbCopiasCarpeta: TRadioButton;
|
|||
rbDebian: TRadioButton;
|
|||
rbScript: TRadioButton;
|
|||
SaveDialog1: TSaveDialog;
|
|||
SelectDirectoryDialog1: TSelectDirectoryDialog;
|
|||
spArcRoot: TSpeedButton;
|
|||
spEA: TSpeedButton;
|
|||
spCue: TSpeedButton;
|
|||
spEnc: TSpeedButton;
|
|||
spCom: TSpeedButton;
|
|||
spMen: TSpeedButton;
|
|||
spArc: TSpeedButton;
|
|||
spCar: TSpeedButton;
|
|||
tmrRecogidaProcesos: TTimer;
|
|||
tmrBarrasE: TTimer;
|
|||
mnuEnvCar: TMenuItem;
|
|||
mnuEnviarArchivo: TMenuItem;
|
|||
mnuMensaje: TMenuItem;
|
|||
mnuAyuda: TMenuItem;
|
|||
mnuConfigurar: TMenuItem;
|
|||
mnuUtilidades: TMenuItem;
|
|||
mnuUsuarios: TMenuItem;
|
|||
mnuRefrescar: TMenuItem;
|
|||
mnuEncender: TMenuItem;
|
|||
mnuAulas: TMenuItem;
|
|||
pnPresenta: TPanel;
|
|||
tmrPingEstadoCentro: TTimer;
|
|||
tmrRecogidaProcesos1: TTimer;
|
|||
IdCmdTCPServer1: TIdCmdTCPServer;
|
|||
procedure Administrador1Click(Sender: TObject);
|
|||
procedure btnAceptarClick(Sender: TObject);
|
|||
procedure btnAndarClick(Sender: TObject);
|
|||
procedure btnBuscarClick(Sender: TObject);
|
|||
procedure btnCerrarClick(Sender: TObject);
|
|||
procedure btnEleMenClick(Sender: TObject);
|
|||
procedure btnGuardarClick(Sender: TObject);
|
|||
procedure btnPararClick(Sender: TObject);
|
|||
procedure btnProcesoMouseDown(Sender: TObject; Button: TMouseButton;
|
|||
Shift: TShiftState; X, Y: Integer);
|
|||
procedure btnReintentarTodosClick(Sender: TObject);
|
|||
procedure btnTodosClick(Sender: TObject);
|
|||
procedure Calculadora1Click(Sender: TObject);
|
|||
procedure cboIntervaloP6KeyPress(Sender: TObject; var Key: char);
|
|||
procedure deCarpetasChange(Sender: TObject);
|
|||
procedure deCarpetasRootChange(Sender: TObject);
|
|||
procedure deCarpetasRootKeyPress(Sender: TObject; var Key: char);
|
|||
procedure dlBuscarFind(Sender: TObject);
|
|||
procedure edPasswordKeyPress(Sender: TObject; var Key: char);
|
|||
procedure fnArchivoRootChange(Sender: TObject);
|
|||
procedure fnArchivoRootKeyPress(Sender: TObject; var Key: char);
|
|||
procedure fnScriptChange(Sender: TObject);
|
|||
procedure FormDestroy(Sender: TObject);
|
|||
procedure FormShow(Sender: TObject);
|
|||
procedure fnArchivoChange(Sender: TObject);
|
|||
procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
|
|||
procedure FormCreate(Sender: TObject);
|
|||
procedure IdCmdTCPServer1ListenException(AThread: TIdListenerThread;
|
|||
AException: Exception);
|
|||
procedure imgPresentacionClick(Sender: TObject);
|
|||
procedure lstComandosClick(Sender: TObject);
|
|||
procedure lstProcesosClick(Sender: TObject);
|
|||
procedure mnuAulaClick(Sender: TObject);
|
|||
procedure mnuConfigurarGruposClick(Sender: TObject);
|
|||
procedure mnuConfigurarImpresoraClick(Sender: TObject);
|
|||
procedure mnuContraClick(Sender: TObject);
|
|||
procedure mnuAcercadeClick(Sender: TObject);
|
|||
procedure mnuArchivoRootClick(Sender: TObject);
|
|||
procedure mnuComandoRootClick(Sender: TObject);
|
|||
procedure mnuConsultaClick(Sender: TObject);
|
|||
procedure mnuCursosClick(Sender: TObject);
|
|||
procedure mnuEncenderClick(Sender: TObject);
|
|||
procedure mnuEnvCarClick(Sender: TObject);
|
|||
procedure mnuEnviarArchivoClick(Sender: TObject);
|
|||
procedure mnuIniEvaClick(Sender: TObject);
|
|||
procedure mnuMapaClick(Sender: TObject);
|
|||
procedure mnuMensajeClick(Sender: TObject);
|
|||
procedure mnuNotClick(Sender: TObject);
|
|||
procedure mnuRepetirClick(Sender: TObject);
|
|||
procedure mnuRestaurarClick(Sender: TObject);
|
|||
procedure mnuResultadosClick(Sender: TObject);
|
|||
procedure mnuSalir1Click(Sender: TObject);
|
|||
procedure mnuTerminalClick(Sender: TObject);
|
|||
procedure rbComandoChange(Sender: TObject);
|
|||
procedure rbCopiasChange(Sender: TObject);
|
|||
procedure resultadoProcesoCommand(ASender: TIdCommand);
|
|||
procedure spBloClick(Sender: TObject);
|
|||
procedure tmrBarrasETimer(Sender: TObject);
|
|||
procedure tmrPingEstadoCentroTimer(Sender: TObject);
|
|||
procedure tmrRecogidaProcesos1Timer(Sender: TObject);
|
|||
procedure tmrRecogidaProcesosTimer(Sender: TObject);
|
|||
private
|
|||
Ordenata:Array of TImage;
|
|||
lblOrdenata:Array of Tlabel;
|
|||
lblMesa:array of Tlabel;
|
|||
btnProceso:array of TSpeedButton;
|
|||
pgOrdenata:array of TColorProgress;
|
|||
mnuGrupo:Array of TMenuItem;
|
|||
procedure btnProcesoClick(sender: TObject);
|
|||
procedure CargarConfiguracionGrupo(grupo: integer);
|
|||
procedure cargasEquiposAula(aula: integer; equipos: ansiString);
|
|||
function CompruebaProcesosActivos(): Boolean;
|
|||
function ConvierteValorCombo(texto: String): integer;
|
|||
procedure destruirComponentes();
|
|||
procedure EquipoAulaEncender(ord_num: integer);
|
|||
procedure EquipoAulaEncenderNo(ord_num: integer);
|
|||
procedure EquipoAulaComando(ord_num: integer);
|
|||
procedure EquipoAulaComandoNo(ord_num:integer);
|
|||
procedure EquipoAulaArchivoRoot(ord_num: integer);
|
|||
procedure EquipoAulaArchivoRootNo(ord_num: integer);
|
|||
procedure IniciarDemonio1();
|
|||
procedure iniciaRevisionCentro();
|
|||
procedure mnuGrupoclick(sender: Tobject);
|
|||
procedure muestraResultadosConsulta();
|
|||
function PausaEquipo(tipo:integer;estado:Boolean; actividad:TEstadoActividadEquipo): integer;
|
|||
procedure RepetirProceso(numEqui: integer);
|
|||
function ValidarProcesoArchivoRoot(): Boolean;
|
|||
function ValidarProcesoAsi(): Boolean;
|
|||
procedure IniciarTCPCMD();
|
|||
procedure ProfeAulaMensaje(ord_num: integer);
|
|||
procedure ProfeAulaMensajeNo(ord_num: integer);
|
|||
procedure ProfeAulaArchivo(ord_num: integer);
|
|||
procedure ProfeAulaArchivoNo(ord_num:integer);
|
|||
procedure ProfeAulaCarpeta(ord_num: integer);
|
|||
procedure ProfeAulaCarpetaNo(ord_num:integer);
|
|||
procedure CambiarIconoActivo(ord_num: integer);
|
|||
procedure CambiarIconoInactivo(ord_num: integer);
|
|||
procedure CargarConfiguracionCentro(archivoaula: string);
|
|||
procedure CargarOrdenesRoot();
|
|||
procedure ColocarPaneles();
|
|||
procedure ComprobarEstadoOrdenadores(numero_pantalla: integer);
|
|||
procedure CrearColocarComponentes();
|
|||
procedure DesmarcarMenus();
|
|||
procedure despulsarMonitores(numero_pant: integer);
|
|||
procedure DetenerActividad(numero_pantalla: integer; ord_num: integer);
|
|||
procedure EjecutarOrdenesFin(tipo:integer;estado:boolean;EnviarMensaje:boolean=false;asunto:string='Aviso';texto:string='Mensaje del Administrador');
|
|||
function HallaSleep(tipo: integer; estado: Boolean; actividad:TEstadoActividadEquipo): integer;
|
|||
procedure EntrarPrograma();
|
|||
procedure IniciarActividad(numero_pantalla: integer; ord_num: integer);
|
|||
procedure IniciarPrograma();
|
|||
procedure IniciarVariables;
|
|||
procedure MensajeEnviado(ord_num:integer; asunto,texto:string);
|
|||
procedure MenusClick(MenuPulsado: Tmenuitem; PantallaNumero: integer;
|
|||
GbParametros: TPanel; BotonHerramientas: Tspeedbutton);
|
|||
procedure MostrarMenus;
|
|||
procedure MostrarPanel(gb: TPanel);
|
|||
procedure MostrarServidoresAulas();
|
|||
procedure ObtenerInicioFin(ord_num:integer;var inicio:integer; var fin:integer);
|
|||
procedure OcultarMenus;
|
|||
procedure OrdenataClick(sender: TObject);
|
|||
procedure OrdenataDragDrop(Sender, Source: TObject; X, Y: Integer);
|
|||
procedure OrdenataDragOver(Sender, Source: TObject; X, Y: Integer;
|
|||
State: TDragState; var Accept: Boolean);
|
|||
procedure OrdenataMouseDown(Sender: TObject; Button: TMouseButton;
|
|||
Shift: TShiftState; X, Y: Integer);
|
|||
procedure OrdenataMouseEnter(Sender: TObject);
|
|||
procedure OrdenEjecutarTodos(numero_pantalla: integer);
|
|||
procedure OrdenRestablecerTodos(numero_pantalla: integer);
|
|||
function NombreUsuarioOrdenador(numord:integer):string;
|
|||
procedure pintarlogos(numero_pantalla: integer);
|
|||
procedure PintarMonPant0(numEquipo:integer);
|
|||
procedure PintarMonPantOtros(numEquipo: integer);
|
|||
function PrioridadMensaje: string;
|
|||
procedure pulsarMonitores(numero_pant: integer);
|
|||
procedure recolocaComponetesMovido(numOrd: integer);
|
|||
function TodosApagados(): boolean;
|
|||
function ValidarContenido(PantallaActual: integer): boolean;
|
|||
{ private declarations }
|
|||
public
|
|||
Procedure RefrescarEquipoAulaNuevo(numero:integer);
|
|||
procedure RefrescarDatosCentro(datoscentro:array of ansistring);
|
|||
procedure anadirResultadoConsulta(idactividad, ip, host, salidaconsola: string;numEquipo:integer);
|
|||
procedure cargaGruposEquipos();
|
|||
end;
|
|||
var
|
|||
frmMain: TfrmMain;
|
|||
implementation
|
|||
{ TfrmMain }
|
|||
uses gruposservidores,mapa,contraservidores,clequiposervidoraula,configuraraplicacion,evaluar,acerca,aulas,clequipoadministrador,clestadocentro;
|
|||
const
|
|||
FILTRO_TXT:string='Archivos de texto (*.txt)|*.txt|Todos los archivos (*.*)|*.*';
|
|||
ORD_EJECUTAR_EN_ADMINISTRADOR:string='%s & 2>> /dev/null';
|
|||
W_ORDENADOR:integer=66;H_ORDENADOR:integer=61;
|
|||
L_GROUPBOX:integer=7;T_GROUPBOX:integer=147;W_GROUPBOX:integer=435;H_GROUPBOX:integer=439;
|
|||
TIEMPO_REVISION_CENTRO:integer=60;
|
|||
TIEMPO_PROCESOS:integer=24;
|
|||
var
|
|||
f_equipoEjecutandoProceso:integer;
|
|||
f_NumeroPantallas:integer=14;
|
|||
f_PantallaActiva:integer=0;
|
|||
fcontadorbarra:array [0..69] of integer;
|
|||
PuntoO:TPoint;
|
|||
numOrdO,numOrdD:integer;
|
|||
f_contador_centro:integer=0;
|
|||
f_contador_ping:integer=0;
|
|||
f_contador_procesos:integer=36;
|
|||
f_contador_procesos_ver:integer=180;
|
|||
f_tipo_envio:integer=-1;
|
|||
f_ordentodos:integer=-1;
|
|||
posicionSelecFinal: integer=0;
|
|||
f_equipoAulaBotonDerecho:integer=0;
|
|||
Procedure TfrmMain.destruirComponentes();
|
|||
var
|
|||
i:integer;
|
|||
begin
|
|||
for i:=0 to g_num_ord_pantalla-1 do
|
|||
begin
|
|||
if Ordenata[i]<>nil then FreeAndNil(Ordenata[i]);
|
|||
if pgOrdenata[i]<>nil then FreeAndNil(pgOrdenata[i]);
|
|||
if lblOrdenata[i]<>nil then FreeAndNil(lblOrdenata[i]);
|
|||
if lblmesa[i]<>nil then FreeAndNil(lblmesa[i]);
|
|||
if btnProceso[i]<>nil then FreeAndNil(btnProceso[i]);
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.CargarConfiguracionGrupo(grupo:integer);
|
|||
var
|
|||
i:integer;
|
|||
dominio,curso,mhost,mip,mmac:string;
|
|||
mestado:boolean;
|
|||
servidores:integer;
|
|||
begin
|
|||
try
|
|||
servidores:= g_GruposEquipos[grupo].NumeroEquipos;
|
|||
if servidores<1 then
|
|||
begin
|
|||
mensaje('Este grupo no contiene ningún equipo. Si lo deseas, puedes añadírselos desde el menú Grupos -> Configurar',Aceptar);
|
|||
exit;
|
|||
end;
|
|||
destruirComponentes();
|
|||
g_num_servidores_aula:=g_GruposEquipos[grupo].NumeroEquipos;
|
|||
lblGrupo.Caption:='Grupo: '+g_GruposEquipos[grupo].Nombre;
|
|||
lblGrupo.Visible:=true;
|
|||
g_num_ord_pantalla:=NumeroOrdenadorePantalla(g_TipoAula,g_num_servidores_aula);
|
|||
setlength(equipoServidorAula,g_num_servidores_aula);
|
|||
SetLength(g_EstadoAulasCentro,g_num_servidores_aula);
|
|||
SetLength(g_equiposAulas,g_num_servidores_aula);
|
|||
for i:=0 to g_num_ord_pantalla-1 do
|
|||
begin
|
|||
if i < g_num_servidores_aula then
|
|||
begin
|
|||
mestado :=true;
|
|||
mhost:=g_GruposEquipos[grupo].Host[i];
|
|||
mip:=g_GruposEquipos[grupo].IP[i];
|
|||
mmac:=g_GruposEquipos[grupo].MAC[i];
|
|||
curso:=g_GruposEquipos[grupo].curso[i];
|
|||
dominio:=g_GruposEquipos[grupo].Dominio[i];
|
|||
equipoServidorAula[i]:=TEquipo.create(i,mhost,mip,mmac,mestado,curso,dominio);
|
|||
end
|
|||
end;
|
|||
IniciarVariables();
|
|||
CrearColocarComponentes();
|
|||
mnuEncenderClick(mnuEncender);
|
|||
//iniciaRevisionAula();
|
|||
iniciaRevisionCentro();
|
|||
except
|
|||
begin
|
|||
Mensaje(MEN_ERROR_AULA,aceptar);
|
|||
application.Terminate
|
|||
end
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.mnuGrupoclick(sender: Tobject);
|
|||
var
|
|||
grupo:integer;
|
|||
begin
|
|||
try
|
|||
grupo:=(sender as TMenuItem).tag;
|
|||
CargarConfiguracionGrupo(grupo);
|
|||
except
|
|||
//mensaje(MEN_ERROR_GRUPOS, aceptar);
|
|||
end
|
|||
end;
|
|||
procedure TfrmMain.cargaGruposEquipos();
|
|||
var
|
|||
icogrupo,i:integer;
|
|||
begin
|
|||
try
|
|||
mnuGrupos1.Clear;
|
|||
setlength(mnuGrupo,g_NumGrupos);
|
|||
for i:=0 to g_NumGrupos -1 do
|
|||
begin
|
|||
icogrupo:=i mod 3;
|
|||
icogrupo:=icogrupo+47;
|
|||
mnuGrupo[i]:=Tmenuitem.create(self);
|
|||
with mnuGrupo[i] do
|
|||
begin
|
|||
Caption:=g_GruposEquipos[i].Nombre;
|
|||
Hint:=g_GruposEquipos[i].nombre;
|
|||
ImageIndex:=icogrupo;
|
|||
OnClick:=@mnuGrupoclick;
|
|||
tag:=i;
|
|||
end;
|
|||
mnuGrupos1.Add(mnuGrupo[i]);
|
|||
end;
|
|||
except
|
|||
mensaje('Error al cargar grupos', aceptar);
|
|||
end;
|
|||
end;
|
|||
constructor THallarResultadoProcesoSync.Create(codigo,ip, host, respuesta: string;numEquipo:integer);
|
|||
begin
|
|||
inherited Create;
|
|||
try
|
|||
fnumEquipo:=numEquipo;
|
|||
fip:= ip;
|
|||
fcodigo:=codigo;
|
|||
fhost:=host;
|
|||
frespuesta:=respuesta;
|
|||
except
|
|||
frespuesta:='La respuesta no ha sido recogida'
|
|||
end;
|
|||
end;
|
|||
procedure THallarResultadoProcesoSync.DoSynchronize;
|
|||
begin
|
|||
frmMain.anadirResultadoConsulta(fcodigo,fip,fhost,frespuesta,fnumEquipo);
|
|||
end;
|
|||
class procedure THallarResultadoProcesoSync.add(codigo,ip,host,respuesta: string;numEquipo:integer);
|
|||
begin
|
|||
with Create(codigo,ip,host,respuesta,numEquipo) do
|
|||
try
|
|||
Synchronize;
|
|||
finally
|
|||
Free;
|
|||
end;
|
|||
end;
|
|||
Function TfrmMain.CompruebaProcesosActivos():Boolean;
|
|||
var
|
|||
respuesta:Boolean;
|
|||
begin
|
|||
respuesta:=true;
|
|||
if equipoAdministrador.RealizandoProcesos then
|
|||
begin
|
|||
case g_tipo_comando of
|
|||
-1: if trim(edComando.Text)<> HTTPDecode(equipoAdministrador.Procesos) then
|
|||
if mensaje('Existe un proceso diferente que aún no ha devuelto sus resultados. Si ejecuta un nuevo proceso, el anterior se continuará ejecutando pero no obtendrá los resultados de su consola. ¿Deseas continuar?',SiNo)=2 then
|
|||
respuesta:=false;
|
|||
0: if trim(fnArchivoRoot.filename)<> HTTPDecode(equipoAdministrador.Procesos) then
|
|||
if mensaje('Se está copiando un archivo en los servidores de aula y el proceso aún no ha devuelto sus resultados. Si ejecuta un nuevo proceso, el anterior se continuará ejecutando pero no obtendrá los resultados de su consola. ¿Deseas continuar?',SiNo)=2 then
|
|||
respuesta:=false;
|
|||
1: if trim(fnArchivoRoot.filename)<> HTTPDecode(equipoAdministrador.Procesos) then
|
|||
if mensaje('Se está instalando un paquete debian en los servidores de aula y el proceso aún no ha devuelto sus resultados. Si ejecuta un nuevo proceso, el anterior se continuará ejecutando pero no obtendrá los resultados de su consola. ¿Deseas continuar?',SiNo)=2 then
|
|||
respuesta:=false;
|
|||
2: if trim(fnScript.FileName)<> HTTPDecode(equipoAdministrador.Procesos) then
|
|||
if mensaje('Se está ejecuantando un script en los servidores de aula y el proceso aún no ha devuelto sus resultados. Si ejecuta un nuevo proceso, el anterior se continuará ejecutando pero no obtendrá los resultados de su consola. ¿Deseas continuar?',SiNo)=2 then
|
|||
respuesta:=false;
|
|||
3: if trim(deCarpetasRoot.Directory)<> HTTPDecode(equipoAdministrador.Procesos) then
|
|||
if mensaje('Se está copiando una carpeta en los servidores de aula y el proceso aún no ha devuelto sus resultados. Si ejecuta un nuevo proceso, el anterior se continuará ejecutando pero no obtendrá los resultados de su consola. ¿Deseas continuar?',SiNo)=2 then
|
|||
respuesta:=false;
|
|||
end;
|
|||
end;
|
|||
result:=respuesta;
|
|||
end;
|
|||
Function TfrmMain.ValidarProcesoAsi():Boolean;
|
|||
var
|
|||
comand,procesoAnterior:String;
|
|||
i:integer;
|
|||
respuesta:Boolean;
|
|||
begin
|
|||
respuesta:=true;
|
|||
case f_tipo_envio of
|
|||
-1:
|
|||
begin
|
|||
comand:=trim(edComando.Text);
|
|||
if trim(edComando.Text)='' then
|
|||
begin
|
|||
mensaje('Escribe el proceso que deseas ejecutar',Aceptar);
|
|||
result:=false;
|
|||
exit;
|
|||
end
|
|||
else if (pos('apt-get',comand) >0) and (pos('install',comand) >0) then
|
|||
begin
|
|||
if (pos('-fy',comand) =0) and (pos('-yf',comand) =0) and (pos('-y',comand) =0) then
|
|||
begin
|
|||
mensaje('Para instalar un paquete remotamente debes usar apt-get -fy install nombre_paquete', aceptar);
|
|||
result:=false;
|
|||
exit;
|
|||
end
|
|||
end;
|
|||
end;
|
|||
2:
|
|||
begin
|
|||
if (not fileexists(fnScript.FileName)) and (Length(meScript.text)<3) then
|
|||
begin
|
|||
mensaje('Selecciona el script que deseas ejecutar o escribe su contenido en el cuadro "Script"',aceptar);
|
|||
result:=false;
|
|||
exit;
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
case f_tipo_envio of
|
|||
-1:
|
|||
begin
|
|||
if mensaje('¿Desea ejecutar el proceso ' + edComando.Text +'?' ,SiNo)=2 then
|
|||
begin
|
|||
result:=false;
|
|||
exit;
|
|||
end;
|
|||
end;
|
|||
2:
|
|||
begin
|
|||
if mensaje('¿Desea ejecutar el script ' + fnScript.FileName +' en los equipos elegidos?' ,SiNo)=2 then
|
|||
begin
|
|||
result:=false;
|
|||
exit;
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
respuesta:=CompruebaProcesosActivos();
|
|||
if respuesta then
|
|||
begin
|
|||
Randomize;
|
|||
equipoAdministrador.RealizandoProcesos:=false;
|
|||
tmrRecogidaProcesos.Enabled:=false;
|
|||
tmrRecogidaProcesos1.Enabled:=false;
|
|||
f_contador_procesos_ver:=TIEMPO_PROCESOS*5;
|
|||
f_contador_procesos:=TIEMPO_PROCESOS;
|
|||
g_tipo_comando:=f_tipo_envio;
|
|||
procesoAnterior:=equipoAdministrador.Procesos;
|
|||
case g_tipo_comando of
|
|||
-1:
|
|||
begin
|
|||
if equipoAdministrador.Procesos<> Trim(HTTPEncode(edComando.Text)) then
|
|||
begin
|
|||
equipoAdministrador.Procesos:=Trim(HTTPEncode(edComando.Text));
|
|||
equipoAdministrador.IdProcesos:='P-'+IntToStr(Random(100000000));
|
|||
//writeln ('Creando un nuevo proceso');
|
|||
end;
|
|||
end;
|
|||
2:
|
|||
begin
|
|||
// writeln('equipoAdministrador.Procesos '+ equipoAdministrador.Procesos + ' Trim(HTTPEncode(fnScript.FileName)) '+ Trim(HTTPEncode(fnScript.FileName)));
|
|||
if ((equipoAdministrador.Procesos ='') or (equipoAdministrador.Procesos<>Trim(HTTPEncode(fnScript.FileName)))) then
|
|||
begin
|
|||
equipoAdministrador.IdProcesos:='S-'+IntToStr(Random(100000000));
|
|||
if Trim(fnScript.FileName)='' then
|
|||
begin
|
|||
fnScript.FileName:='/tmp/'+equipoAdministrador.IdProcesos+'.sh';
|
|||
end;
|
|||
equipoAdministrador.Procesos:=Trim(HTTPEncode(fnScript.FileName));
|
|||
//writeln(meScript.Lines.);
|
|||
g_archivo_nombre_root:=ExtractFilename(fnScript.filename);
|
|||
end;
|
|||
try
|
|||
//writeln ('Archivo de script: '+ fnScript.FileName);
|
|||
meScript.Lines.SaveToFile(fnScript.FileName);
|
|||
except
|
|||
mensaje('No existe el script indicado. Comprueba su ruta', aceptar);
|
|||
result:=false;
|
|||
exit;
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
if equipoAdministrador.Procesos<> procesoAnterior then
|
|||
begin
|
|||
//writeln(procesoanterior, ' ', equipoAdministrador.Procesos);
|
|||
if f_PantallaActiva=6 then EquipoAulaComandoNo(-1);
|
|||
for i:=0 to High(equipoServidorAula) do
|
|||
begin
|
|||
btnProceso[i].Enabled:=false;
|
|||
btnProceso[i].Font.Color:=clBlack;
|
|||
end;
|
|||
end;
|
|||
if f_ordentodos = -1 then
|
|||
begin
|
|||
for i:=0 to High(equipoServidorAula) do
|
|||
begin
|
|||
if equipoServidorAula[i].EstadoActivadEquipo in [eEncendido,eEncendiendo,eUsuario,eApagando] then
|
|||
begin
|
|||
equipoServidorAula[i].ProcesoHace:=true;
|
|||
equipoServidorAula[i].ProcesoTerminado:=false;
|
|||
equipoServidorAula[i].ProcesoId:=equipoAdministrador.IdProcesos;
|
|||
end
|
|||
else
|
|||
begin
|
|||
equipoServidorAula[i].ProcesoHace:=false;
|
|||
equipoServidorAula[i].ProcesoTerminado:=true;
|
|||
equipoServidorAula[i].ProcesoId:='S';
|
|||
end
|
|||
end;
|
|||
end
|
|||
else
|
|||
begin
|
|||
equipoServidorAula[f_ordentodos].ProcesoHace:=true;
|
|||
equipoServidorAula[f_ordentodos].ProcesoTerminado:=false;
|
|||
equipoServidorAula[f_ordentodos].ProcesoId:=equipoAdministrador.IdProcesos;
|
|||
end;
|
|||
equipoAdministrador.RealizandoProcesos:=true;
|
|||
tmrRecogidaProcesos.Enabled:=true;
|
|||
tmrRecogidaProcesos1.Enabled:=true;
|
|||
lblTiempoProceso.Caption:='';
|
|||
lblTiempoProceso.Visible:=true;
|
|||
lblTiempoProceso.BringToFront;
|
|||
Application.ProcessMessages;
|
|||
g_pantalla_proceso:=6;
|
|||
//writeln('validar proceso asi ',equipoAdministrador.Procesos,' ',equipoAdministrador.IdProcesos);
|
|||
end;
|
|||
result:=respuesta;
|
|||
end;
|
|||
procedure TfrmMain.anadirResultadoConsulta(idactividad,ip,host, salidaconsola:string;numEquipo:integer);
|
|||
begin
|
|||
if (Trim(idactividad)='') or (Trim(ip)='') or (Trim(host)='') or (numEquipo > High(equipoServidorAula)) then exit;
|
|||
if idactividad=equipoAdministrador.IdProcesos then
|
|||
begin
|
|||
if (equipoServidorAula[numEquipo].IP=ip) and (equipoServidorAula[numEquipo].mihost=host) then
|
|||
begin
|
|||
if equipoServidorAula[numEquipo].ProcesoHace then
|
|||
if not equipoServidorAula[numEquipo].ProcesoTerminado then
|
|||
begin
|
|||
equipoServidorAula[numEquipo].ProcesoTerminado:=true;
|
|||
equipoServidorAula[numEquipo].ProcesoResultado:=salidaconsola;
|
|||
btnProceso[numEquipo].enabled:=true;
|
|||
btnProceso[numEquipo].font.Color:=clGreen;
|
|||
g_proceso_realizado:=true;
|
|||
if (f_equipoEjecutandoProceso <> -1) and (f_equipoEjecutandoProceso < g_num_servidores_aula)then
|
|||
muestraResultadosConsulta();
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.IniciarTCPCMD();
|
|||
const
|
|||
LIBERAR_PUERTO:string='fuser -k -n tcp 38002';
|
|||
PUERTO_PROCESOS:integer=38002;
|
|||
begin
|
|||
try
|
|||
IniciarDemonio1();
|
|||
except
|
|||
Ejecutar(LIBERAR_PUERTO);
|
|||
Sleep(100);
|
|||
try
|
|||
IniciarDemonio1()
|
|||
except
|
|||
////writeln('Error inicia servidor');
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.IniciarDemonio1();
|
|||
const
|
|||
PUERTO_PROCESOS:integer=38002;
|
|||
var
|
|||
aCommand:TIdCommandHandler;
|
|||
begin
|
|||
try
|
|||
IdCmdTCPServer1:=TIdCmdTCPServer.Create(nil);
|
|||
with IdCmdTCPServer1 do
|
|||
begin
|
|||
Bindings.Clear;
|
|||
Bindings.Add;
|
|||
Bindings.items[0].IP:='0.0.0.0';
|
|||
Bindings.Items[0].Port:=PUERTO_PROCESOS;
|
|||
DefaultPort:=PUERTO_PROCESOS;
|
|||
MaxConnections:=0;
|
|||
ListenQueue:=15;
|
|||
TerminateWaitTime:=5000;
|
|||
aCommand:=CommandHandlers.Add;
|
|||
aCommand.Command := 'resultadoProceso';
|
|||
aCommand.OnCommand :=@resultadoProcesoCommand;
|
|||
aCommand.Disconnect:=true;
|
|||
aCommand.CmdDelimiter:=#32;
|
|||
aCommand.ParamDelimiter:=#32;
|
|||
aCommand.NormalReply.Code:='201';
|
|||
aCommand.Enabled:=true;
|
|||
OnListenException:=@IdCmdTCPServer1ListenException;
|
|||
if active then active:=false;
|
|||
active:=true;
|
|||
end;
|
|||
except
|
|||
writeln('Error al iniciar servidor');
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.RefrescarDatosCentro(datoscentro:array of ansistring);
|
|||
var
|
|||
i,j:integer;
|
|||
begin
|
|||
try
|
|||
try
|
|||
for i:=0 to g_num_servidores_aula -1 do
|
|||
begin
|
|||
for j:=0 to 35 do
|
|||
begin
|
|||
g_equiposAulas[i][j].curso:=g_equiposAulas[i][0].curso;
|
|||
g_equiposAulas[i][j].miHost:='';
|
|||
g_equiposAulas[i][j].IP:='';
|
|||
g_equiposAulas[i][j].estadoActividad:=eAveriado;
|
|||
if j=0 then
|
|||
begin
|
|||
g_equiposAulas[i][j].curso:=equipoServidorAula[i].curso;
|
|||
g_equiposAulas[i][j].miHost:=equipoServidorAula[i].mihost;
|
|||
g_equiposAulas[i][j].IP:=equipoServidorAula[i].ip;
|
|||
g_equiposAulas[i][j].estadoActividad:=eApagado;
|
|||
end;
|
|||
g_equiposAulas[i][j].usuarioActivo:='';
|
|||
end;
|
|||
end;
|
|||
// Application.ProcessMessages;
|
|||
////writeln(g_num_servidores_aula,Length(g_EstadoAulasCentro),Length(datoscentro));
|
|||
for i:=0 to g_num_servidores_aula -1 do
|
|||
begin
|
|||
g_EstadoAulasCentro[i]:=datoscentro[i];
|
|||
if (trim (datoscentro[i])<>'') then
|
|||
begin
|
|||
cargasEquiposAula(i,g_EstadoAulasCentro[i]);
|
|||
//writeln ('g_EstadoAulasCentro[i]',g_EstadoAulasCentro[i]);
|
|||
end;
|
|||
if (equipoServidorAula[i].UsuarioActivo <>g_equiposAulas[i][0].usuarioActivo) or (equipoServidorAula[i].EstadoActivadEquipo <>g_equiposAulas[i][0].estadoActividad) then
|
|||
begin
|
|||
equipoServidorAula[i].EstadoActivadEquipo:=g_equiposAulas[i][0].estadoActividad;
|
|||
equipoServidorAula[i].UsuarioActivo:=g_equiposAulas[i][0].usuarioActivo;
|
|||
RefrescarEquipoAulaNuevo (i);
|
|||
Application.ProcessMessages;
|
|||
end;
|
|||
end;
|
|||
except
|
|||
//writeln('error al cargar datos')
|
|||
end;
|
|||
finally
|
|||
f_contador_centro:=0;
|
|||
g_revisionCentro_actualizada:=true;
|
|||
tmrPingEstadoCentro.Enabled:=true;
|
|||
if lblRevInicio.Visible then
|
|||
begin
|
|||
lblRevInicio.visible:=false;
|
|||
enabled:=true;
|
|||
Cursor:=crDefault;
|
|||
Image1.Cursor:=crDefault;
|
|||
pnEnc.Cursor:=crDefault;
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.cargasEquiposAula(aula: integer; equipos: ansiString);
|
|||
var
|
|||
sl,seips:TStringList;
|
|||
d,i:integer;
|
|||
estado:String;
|
|||
begin
|
|||
enabled:=true;
|
|||
try
|
|||
try
|
|||
if trim(equipos)='' then exit;
|
|||
sl:=TStringList.create;
|
|||
seips:=TStringList.create;
|
|||
sl.text:=equipos;
|
|||
//writeln(equipos);
|
|||
d:=0;
|
|||
for i:=0 to sl.Count -1 do
|
|||
begin
|
|||
if (aula < g_num_servidores_aula) and (d < Length(g_equiposAulas[aula])) then;
|
|||
//writeln('--------->'+sl[i]);
|
|||
seips.Delimiter:='&';
|
|||
seips.DelimitedText:=sl[i];
|
|||
seips.Delimiter:='&';
|
|||
g_equiposAulas[aula][d].miHost:=seips[0];
|
|||
g_equiposAulas[aula][d].Ip:=seips[1];
|
|||
g_equiposAulas[aula][d].mac:=seips[2];
|
|||
g_equiposAulas[aula][d].usuarioActivo:=seips[3];
|
|||
estado:=seips[4];
|
|||
g_equiposAulas[aula][d].estadoActividad:=eApagado;
|
|||
if estado='1' then
|
|||
begin
|
|||
g_equiposAulas[aula][d].estadoActividad:=eEncendido;
|
|||
if trim (g_equiposAulas[aula][d].usuarioActivo) <> '' then
|
|||
g_equiposAulas[aula][d].estadoActividad:=eUsuario;
|
|||
end;
|
|||
inc(d);
|
|||
end
|
|||
except
|
|||
//
|
|||
end;
|
|||
finally
|
|||
sl.Free;
|
|||
seips.free;
|
|||
end
|
|||
end;
|
|||
procedure TfrmMain.iniciaRevisionCentro();
|
|||
var
|
|||
i:integer;
|
|||
ipsServidores:array of String;
|
|||
begin
|
|||
tmrPingEstadoCentro.Enabled:=false;
|
|||
SetLength(ipsServidores,Length(equipoServidorAula));
|
|||
//writeln('Length(equipoServidorAula) ',Length(equipoServidorAula));
|
|||
//writeln('---------------Iniciando revisión del cetro');
|
|||
try
|
|||
for i:=0 to High(equipoServidorAula) do
|
|||
ipsServidores[i]:=Trim(equipoServidorAula[i].IP);
|
|||
f_contador_centro:=0;
|
|||
with ThrEstadoCentro.create(ipsServidores) do Resume;
|
|||
except
|
|||
tmrPingEstadoCentro.Enabled:=true;
|
|||
//writeln('Error al revisar el centro');
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.tmrPingEstadoCentroTimer(Sender: TObject);
|
|||
begin
|
|||
g_contador_refresco_centro:=TIEMPO_REVISION_CENTRO-f_contador_centro;
|
|||
inc(f_contador_centro);
|
|||
//writeln(inttostr(f_contador_centro));
|
|||
if f_contador_centro>=TIEMPO_REVISION_CENTRO then
|
|||
begin
|
|||
tmrPingEstadoCentro.Enabled:=false;
|
|||
g_contador_refresco_centro:=1;
|
|||
f_contador_centro:=0;
|
|||
iniciaRevisionCentro();
|
|||
g_contador_refresco_centro:=TIEMPO_REVISION_CENTRO;
|
|||
//writeln('Iniciando la revisión del centro');
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.tmrRecogidaProcesos1Timer(Sender: TObject);
|
|||
var
|
|||
texto:String;
|
|||
begin
|
|||
if f_contador_procesos_ver>0 then f_contador_procesos_ver:=f_contador_procesos_ver-1;
|
|||
case g_tipo_comando of
|
|||
-1:texto:='Comando: ';
|
|||
0:texto:='Archivo: ';
|
|||
1:texto:='Paquete: ';
|
|||
2:texto:='Script: ';
|
|||
3:texto:='Carpeta: ';
|
|||
end;
|
|||
lblTiempoProceso.Caption:=texto+tiempo(f_contador_procesos_ver);
|
|||
lblTiempoProceso1.Caption:='Esperando respuestas. '+tiempo(f_contador_procesos_ver);
|
|||
end;
|
|||
procedure TfrmMain.tmrRecogidaProcesosTimer(Sender: TObject);
|
|||
var
|
|||
i:integer;
|
|||
todasrrecogidas:Boolean;
|
|||
mfin:String;
|
|||
begin
|
|||
if not equipoAdministrador.RealizandoProcesos then exit;
|
|||
todasrrecogidas:=true;
|
|||
f_contador_procesos:=f_contador_procesos-1;
|
|||
for i:=0 to high(equipoServidorAula) do
|
|||
begin
|
|||
if equipoServidorAula[i].ProcesoHace then
|
|||
if equipoServidorAula[i].ProcesoTerminado=false then
|
|||
todasrrecogidas:=false;
|
|||
end;
|
|||
if f_contador_procesos<=0 then
|
|||
begin
|
|||
tmrRecogidaProcesos1.Enabled:=false;
|
|||
tmrRecogidaProcesos.Enabled:=false;
|
|||
mfin:='Han pasado ' +inttostr((TIEMPO_PROCESOS *5) div 60) + ' minutos desde que ejecuto el ultimo proceso y aún quedan equipos por devolver la salida de consola de dicho proceso.';
|
|||
mfin:=mfin+' ¿Deseas esperar otros ' +inttostr((TIEMPO_PROCESOS *5) div 60) +' a que dichos equipos lo hagan antes de ver los resultados del mismo?';
|
|||
lblTiempoProceso.Caption:='Tiempo completado';
|
|||
lblTiempoProceso.Caption:='Consulta finalizada';
|
|||
Application.ProcessMessages;
|
|||
if Mensaje(mfin,SiNo) = 1 then
|
|||
begin
|
|||
f_contador_procesos:=TIEMPO_PROCESOS;
|
|||
f_contador_procesos_ver:=TIEMPO_PROCESOS*5;
|
|||
tmrRecogidaProcesos1.Enabled:=true;
|
|||
tmrRecogidaProcesos.Enabled:=true;
|
|||
end;
|
|||
end;
|
|||
if (f_contador_procesos<=0) or todasrrecogidas then
|
|||
begin
|
|||
todasrrecogidas:=false;
|
|||
muestraResultadosConsulta();
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.muestraResultadosConsulta();
|
|||
var
|
|||
i:integer;
|
|||
begin
|
|||
tmrRecogidaProcesos1.Enabled:=false;
|
|||
tmrRecogidaProcesos.enabled:=false;
|
|||
equipoAdministrador.RealizandoProcesos:=false;
|
|||
f_contador_procesos:=TIEMPO_PROCESOS;
|
|||
f_contador_procesos_ver:=TIEMPO_PROCESOS*5;
|
|||
for i:=0 to High(equipoServidorAula) do
|
|||
begin
|
|||
btnProceso[i].Enabled:=false;
|
|||
btnProceso[i].Font.Color:=clBlack;
|
|||
if ((equipoServidorAula[i].ProcesoHace) and (equipoServidorAula[i].ProcesoId = equipoAdministrador.IdProcesos)) then
|
|||
begin
|
|||
btnProceso[i].Enabled:=true;
|
|||
if equipoServidorAula[i].ProcesoTerminado then
|
|||
begin
|
|||
btnProceso[i].Font.Color:=clGreen;
|
|||
end
|
|||
else
|
|||
begin
|
|||
btnProceso[i].Font.Color:=clred;
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
lblTiempoProceso1.Caption:='';
|
|||
meProceso1.Clear;
|
|||
if f_equipoEjecutandoProceso = -1 then
|
|||
begin
|
|||
btnTodosClick(btnTodos)
|
|||
end
|
|||
else if f_equipoEjecutandoProceso< g_num_servidores_aula then
|
|||
begin
|
|||
if btnProceso[f_equipoEjecutandoProceso].Enabled then
|
|||
btnProcesoClick( btnProceso[f_equipoEjecutandoProceso])
|
|||
end
|
|||
else
|
|||
btnTodosClick(btnTodos);
|
|||
application.ProcessMessages;
|
|||
pnTodos.Left:=0;
|
|||
pnTodos.visible:=true;
|
|||
pnTodos.BringToFront;
|
|||
lblTiempoProceso.visible:=false;
|
|||
end;
|
|||
procedure TfrmMain.FormShow(Sender: TObject);
|
|||
begin
|
|||
////writeln('Revisando Estado del centro al mostrar el formulario');
|
|||
//iniciaRevisionAula();
|
|||
if pnPresenta.visible then edPassword.SetFocus;
|
|||
//iniciaRevisionCentro();
|
|||
end;
|
|||
procedure TfrmMain.tmrBarrasETimer(Sender: TObject);
|
|||
var
|
|||
i:integer;
|
|||
begin
|
|||
for i:=0 to g_num_servidores_aula-1 do
|
|||
begin
|
|||
if equipoServidorAula[i].EstadoActivadEquipo=eEncendiendo then
|
|||
begin;
|
|||
fcontadorbarra[i]+=6;
|
|||
if fcontadorbarra[i]>60 then fcontadorbarra[i]:=0;
|
|||
if pgOrdenata[i].visible=true then
|
|||
pgOrdenata[i].Progress:=fcontadorbarra[i]
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
function TfrmMain.NombreUsuarioOrdenador(numord:integer):string;
|
|||
var
|
|||
nombre:String;
|
|||
begin
|
|||
nombre:=equipoServidorAula[numord].mihost;
|
|||
if g_verNombreCursos then
|
|||
if trim (equipoServidorAula[numord].Curso)<>'' then
|
|||
nombre:=equipoServidorAula[numord].Curso;
|
|||
Result:=nombre;
|
|||
end;
|
|||
Procedure TfrmMain.RefrescarEquipoAulaNuevo(numero:integer);
|
|||
var
|
|||
estadoActividad:TEstadoActividadEquipo;
|
|||
i: integer;
|
|||
begin
|
|||
estadoActividad:= equipoServidorAula[numero].EstadoActivadEquipo;
|
|||
lblOrdenata[numero].caption:= NombreUsuarioOrdenador(numero) ;
|
|||
Case EstadoActividad of
|
|||
eAveriado,eApagado,eApagando:
|
|||
begin
|
|||
for i:= 0 to f_NumeroPantallas -1 do
|
|||
begin
|
|||
equipoServidorAula[numero].fIconoMonitor[i]:=0;
|
|||
equipoServidorAula[numero].fMonitorPulsado[i]:=false;
|
|||
end;
|
|||
end;
|
|||
eEncendido,eUsuario:
|
|||
begin
|
|||
equipoServidorAula[numero].fmonitorPulsado[0]:=true;
|
|||
equipoServidorAula[numero].fIconoMonitor[0]:=1;
|
|||
end;
|
|||
eEncendiendo:
|
|||
for i:= 1 to f_NumeroPantallas -1 do
|
|||
begin
|
|||
equipoServidorAula[numero].fIconoMonitor[i]:=0;
|
|||
equipoServidorAula[numero].fMonitorPulsado[i]:=false;
|
|||
end;
|
|||
end;
|
|||
Case f_PantallaActiva of
|
|||
0:PintarMonPant0(numero);
|
|||
else
|
|||
PintarMonPantOtros(numero);
|
|||
end;
|
|||
if not g_cambiando_menu then ordenata[numero].refresh;
|
|||
end;
|
|||
procedure TfrmMain.PintarMonPantOtros(numEquipo:integer);
|
|||
var
|
|||
icono:integer;
|
|||
begin
|
|||
icono:=equipoServidorAula[numEquipo].IconoEquipo(f_PantallaActiva);
|
|||
pgOrdenata[numEquipo].visible:=false;
|
|||
if lblOrdenata[numequipo].visible=false then exit;
|
|||
with ordenata[numEquipo] do
|
|||
begin
|
|||
Picture.Bitmap.clear;
|
|||
if (equipoServidorAula[numEquipo].EstadoActivadEquipo in [eUsuario])then
|
|||
begin
|
|||
cursor:=crHandPoint;
|
|||
enabled:=true;
|
|||
Case icono of
|
|||
0: imlIcoIna.GetBitmap(f_PantallaActiva,Picture.Bitmap);
|
|||
1: imlIcoAct1.GetBitmap(f_PantallaActiva,Picture.Bitmap);
|
|||
end;
|
|||
end
|
|||
else if (f_PantallaActiva in [6,7]) and (equipoServidorAula[numEquipo].EstadoActivadEquipo=eEncendido) then
|
|||
begin
|
|||
cursor:=crHandPoint;
|
|||
enabled:=true;
|
|||
Case icono of
|
|||
0: imlIcoIna.GetBitmap(f_PantallaActiva,Picture.Bitmap);
|
|||
1: imlIcoAct1.GetBitmap(f_PantallaActiva,Picture.Bitmap);
|
|||
end;
|
|||
end
|
|||
else
|
|||
begin
|
|||
Case icono of
|
|||
2:imlIcoDis.GetBitmap(0,Picture.Bitmap);
|
|||
0,1:imldisabled.GetBitmap(f_PantallaActiva,Picture.Bitmap);
|
|||
end;
|
|||
cursor:=crarrow;
|
|||
enabled:=false;
|
|||
end
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.PintarMonPant0(numEquipo:integer);
|
|||
var
|
|||
estado:TEstadoActividadEquipo;
|
|||
begin
|
|||
pgOrdenata[numEquipo].visible:=false;
|
|||
estado:=equipoServidorAula[numequipo].EstadoActivadEquipo;
|
|||
if lblOrdenata[numequipo].visible=false then exit;
|
|||
with ordenata[numEquipo] do
|
|||
begin
|
|||
Picture.Bitmap.clear;
|
|||
Case estado of
|
|||
eApagado:
|
|||
begin
|
|||
imlEncender.GetBitmap(0,Picture.Bitmap);
|
|||
cursor:=crHandPoint;
|
|||
enabled:=true;
|
|||
end;
|
|||
eEncendiendo:
|
|||
begin
|
|||
imlEncender.GetBitmap(1,Picture.Bitmap);
|
|||
cursor:=crHourGlass;
|
|||
enabled:=false;
|
|||
pgOrdenata[numEquipo].ForeColor:=clYellow;
|
|||
pgOrdenata[numEquipo].MaxValue:=70;
|
|||
pgOrdenata[numEquipo].Progress:=0;
|
|||
pgOrdenata[numEquipo].visible:=true;
|
|||
end;
|
|||
eEncendido:
|
|||
begin
|
|||
imlEncender.GetBitmap(2,Picture.Bitmap);
|
|||
cursor:=crHandPoint;
|
|||
enabled:=true;
|
|||
end;
|
|||
eUsuario:
|
|||
begin
|
|||
imlEncender.GetBitmap(3,Picture.Bitmap);
|
|||
cursor:=crHandPoint;
|
|||
enabled:=true;
|
|||
end;
|
|||
eApagando:
|
|||
begin
|
|||
imlEncender.GetBitmap(4,Picture.Bitmap);
|
|||
cursor:=crHourGlass;
|
|||
enabled:=false;
|
|||
pgOrdenata[numEquipo].ForeColor:=clRed;
|
|||
pgOrdenata[numEquipo].MaxValue:=50;
|
|||
pgOrdenata[numEquipo].Progress:=0;
|
|||
pgOrdenata[numEquipo].visible:=true;
|
|||
end;
|
|||
eAveriado:
|
|||
begin
|
|||
imlEncender.GetBitmap(5,Picture.Bitmap);
|
|||
cursor:=crDefault;
|
|||
enabled:=false;
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.ProfeAulaMensaje(ord_num:integer);
|
|||
begin
|
|||
g_mensaje_prioridad:=PrioridadMensaje;
|
|||
g_mensaje_asunto:=HTTPEncode(edasumen.text);
|
|||
g_mensaje_texto:=HTTPEncode(metexmen.text);
|
|||
EjecutarOrdenesFin(ord_num,true)
|
|||
end;
|
|||
procedure TfrmMain.EquipoAulaComando(ord_num:integer);
|
|||
begin
|
|||
if g_tipo_comando = 2 then g_archivo_path_root:=fnScript.filename;
|
|||
EjecutarOrdenesFin(ord_num,true);
|
|||
end;
|
|||
procedure TfrmMain.EquipoAulaComandoNo(ord_num:integer);
|
|||
begin
|
|||
EjecutarOrdenesFin(ord_num,false)
|
|||
end;
|
|||
Function TfrmMain.PrioridadMensaje:string;
|
|||
var
|
|||
i,nprio:integer;
|
|||
begin
|
|||
nprio:=0;
|
|||
for i:=0 to pnprioridad.ControlCount -1 do
|
|||
if pnprioridad.controls[i] is Tradiobutton then
|
|||
if (pnprioridad.controls[i] as Tradiobutton).Checked =true then
|
|||
nprio:=(pnprioridad.controls[i] as Tradiobutton).tag;
|
|||
result:=inttostr(nprio)
|
|||
end;
|
|||
procedure TfrmMain.ProfeAulaCarpetaNo(ord_num:integer);
|
|||
begin
|
|||
EjecutarOrdenesFin(ord_num,false);
|
|||
end;
|
|||
procedure TfrmMain.ProfeAulaCarpeta(ord_num:integer);
|
|||
begin
|
|||
g_carpeta_mensaje:=meCarpertas.text;
|
|||
if trim(g_carpeta_mensaje)='' then g_carpeta_mensaje:='Has recibido una carpeta del administrador informático. La encontrarás en el directorio recibidos_administrador de tu directorio personal';
|
|||
g_carpeta_mensaje:=HTTPEncode(g_carpeta_mensaje);
|
|||
EjecutarOrdenesFin(ord_num,true)
|
|||
end;
|
|||
procedure TfrmMain.ProfeAulaMensajeNo(ord_num:integer);
|
|||
begin
|
|||
EjecutarOrdenesFin(ord_num,false);
|
|||
end;
|
|||
procedure TfrmMain.ProfeAulaArchivoNo(ord_num:integer);
|
|||
begin
|
|||
ProfeAulaMensajeNo(ord_num);
|
|||
end;
|
|||
procedure TfrmMain.ProfeAulaArchivo(ord_num:integer);
|
|||
begin
|
|||
g_archivo_path:=fnArchivo.filename;
|
|||
g_archivo_mensaje:=meTexArc.Text;
|
|||
if trim(g_archivo_mensaje)='' then g_archivo_mensaje:='Has recibido un archivo del administrador informático. La encontrarás en el directorio recibidos_administrador de tu directorio personal';
|
|||
g_archivo_mensaje:=HTTPEncode(g_archivo_mensaje);
|
|||
EjecutarOrdenesFin(ord_num,true)
|
|||
end;
|
|||
procedure TfrmMain.EquipoAulaArchivoRoot(ord_num:integer);
|
|||
begin
|
|||
g_archivo_path_root:=fnArchivoRoot.filename;
|
|||
g_carpeta_destino_root:=HTTPEncode(edCarpetaDestino.Text);
|
|||
EjecutarOrdenesFin(ord_num,true)
|
|||
end;
|
|||
procedure TfrmMain.EquipoAulaArchivoRootNo(ord_num:integer);
|
|||
begin
|
|||
EjecutarOrdenesFin(ord_num,false);
|
|||
end;
|
|||
procedure TfrmMain.EquipoAulaEncender(ord_num:integer);
|
|||
begin
|
|||
f_contador_ping:=0;
|
|||
EjecutarOrdenesFin(ord_num,true)
|
|||
end;
|
|||
procedure TfrmMain.EquipoAulaEncenderNo(ord_num:integer);
|
|||
begin
|
|||
f_contador_ping:=0;
|
|||
EjecutarOrdenesFin(ord_num,false);
|
|||
end;
|
|||
Procedure TfrmMain.ColocarPaneles();
|
|||
var
|
|||
j,i:integer;
|
|||
cnt:Tcontrol;
|
|||
begin
|
|||
for i:=0 to controlcount-1 do
|
|||
begin
|
|||
if (controls[i] is TPanel) and ((controls[i] as Tpanel).Tag=20) then
|
|||
begin
|
|||
(controls[i] as TPanel).SetBounds(L_GROUPBOX,T_GROUPBOX,W_GROUPBOX,H_GROUPBOX);
|
|||
(controls[i] as TPanel).color:=RGB(255,255,255);
|
|||
for j:=0 to (controls[i] as TPanel).ControlCount-1 do
|
|||
begin
|
|||
cnt:=(controls[i] as TPanel).controls[j];
|
|||
cnt.setbounds(cnt.Left,cnt.top,cnt.Width,cnt.Height);
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.OcultarMenus;
|
|||
var
|
|||
i:integer;
|
|||
begin
|
|||
for i:=0 to self.componentcount-1 do
|
|||
if (components[i] is TmenuItem) then (components[i] as TmenuItem).visible:=false;
|
|||
end;
|
|||
procedure TfrmMain.MostrarMenus;
|
|||
var
|
|||
i:integer;
|
|||
begin
|
|||
for i:=0 to self.componentcount-1 do
|
|||
if (components[i] is TmenuItem) then (components[i] as TmenuItem).visible:=true;
|
|||
end;
|
|||
procedure TfrmMain.FormCreate(Sender: TObject);
|
|||
var
|
|||
usuario:string;
|
|||
begin
|
|||
Application.Icon:=frmMain.Icon;
|
|||
top:=13;left:=(screen.Width-width) div 2;
|
|||
f_PantallaActiva:=0;
|
|||
OcultarMenus();
|
|||
ColocarPaneles();
|
|||
pnPresenta.align:=alClient;
|
|||
pnPresenta.bringtoFront;
|
|||
imgPresentacion.align:=alClient;
|
|||
Randomize();
|
|||
pnfondo.align:=alclient;
|
|||
usuario:=getenvironmentvariable('USER');
|
|||
if usuario<>'root'then
|
|||
begin
|
|||
mensaje(MEN_SOLO_ROOT,aceptar);
|
|||
application.Terminate;
|
|||
exit;
|
|||
end;
|
|||
if not fileexists(DIR_SETUP_ADTOS) then
|
|||
begin
|
|||
mensaje('No existe '+ DIR_SETUP_ADTOS, aceptar);
|
|||
Application.Terminate;
|
|||
exit;
|
|||
end;
|
|||
application.processmessages;
|
|||
application.Icon:=frmMain.Icon;
|
|||
equipoAdministrador:=TEquipoAdministrador.create();
|
|||
CargarConfiguracionCentro(g_archivo_configuracion_adtos);
|
|||
IniciarPrograma();
|
|||
tmrBarrasE.Enabled:=true;
|
|||
if not directoryexists(equipoAdministrador.DirAdtos)
|
|||
then mkdir(equipoAdministrador.DirAdtos);
|
|||
IniciarTCPCMD();
|
|||
end;
|
|||
procedure TfrmMain.IdCmdTCPServer1ListenException(AThread: TIdListenerThread;
|
|||
AException: Exception);
|
|||
begin
|
|||
//writeln('Exceso de hilos');
|
|||
end;
|
|||
procedure TfrmMain.imgPresentacionClick(Sender: TObject);
|
|||
begin
|
|||
end;
|
|||
procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: boolean);
|
|||
begin
|
|||
if mensaje(MEN_SALIR,sino) = 2 then
|
|||
canclose:=false
|
|||
else
|
|||
begin
|
|||
hide;
|
|||
application.processmessages;
|
|||
g_apagando:=true;
|
|||
Application.ProcessMessages;
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.btnAndarClick(Sender: TObject);
|
|||
begin
|
|||
f_ordentodos:=-1;
|
|||
if ValidarContenido(f_PantallaActiva)=false then exit;
|
|||
//writeln(ValidarContenido(f_PantallaActiva), ' ',f_PantallaActiva);
|
|||
OrdenEjecutarTodos(f_PantallaActiva);
|
|||
end;
|
|||
procedure TfrmMain.btnBuscarClick(Sender: TObject);
|
|||
begin
|
|||
posicionSelecFinal:=0;
|
|||
dlBuscar.Execute;
|
|||
end;
|
|||
procedure TfrmMain.btnCerrarClick(Sender: TObject);
|
|||
begin
|
|||
pnTodos.visible:=false;
|
|||
end;
|
|||
procedure TfrmMain.btnEleMenClick(Sender: TObject);
|
|||
begin
|
|||
opendialog3.Filter:=FILTRO_TXT;
|
|||
if opendialog3.execute then
|
|||
meTexMen.lines.LoadFromFile(opendialog3.FileName);
|
|||
end;
|
|||
procedure TfrmMain.btnGuardarClick(Sender: TObject);
|
|||
begin
|
|||
if savedialog1.execute then
|
|||
meProceso1.lines.savetofile(savedialog1.filename);
|
|||
end;
|
|||
procedure TfrmMain.Administrador1Click(Sender: TObject);
|
|||
begin
|
|||
TfrmConpro.Create(nil).showmodal;
|
|||
end;
|
|||
procedure TfrmMain.btnAceptarClick(Sender: TObject);
|
|||
begin
|
|||
if Trim(edPassword.Text)='' then
|
|||
begin
|
|||
Mensaje('Introduzca la contraseña de adtos',Aceptar);
|
|||
exit;
|
|||
end;
|
|||
//if compruebaPasswordRoot(edPassword.Text) then
|
|||
if edPassword.Text='adtos2014' then
|
|||
EntrarPrograma()
|
|||
else
|
|||
begin
|
|||
Mensaje('Introduzca la contraseña de adtos',Aceptar);
|
|||
edPassword.text:='';
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.btnPararClick(Sender: TObject);
|
|||
begin
|
|||
if f_PantallaActiva =0 then
|
|||
begin
|
|||
if (Length(Trim(g_contraServidores)) <1) then
|
|||
begin
|
|||
mensaje(MEN_CONTRA_SERVIDORES_AULA, aceptar);
|
|||
exit;
|
|||
end;
|
|||
if Mensaje('¿Deseas apagar todos los equipos?',sino)=2 then
|
|||
exit
|
|||
end;
|
|||
OrdenRestablecerTodos(f_PantallaActiva);
|
|||
end;
|
|||
procedure TfrmMain.btnProcesoMouseDown(Sender: TObject; Button: TMouseButton;
|
|||
Shift: TShiftState; X, Y: Integer);
|
|||
begin
|
|||
g_botonProcesoMarcado:=(Sender as TSpeedButton).tag;
|
|||
f_ordentodos:=g_botonProcesoMarcado;
|
|||
f_equipoEjecutandoProceso:=g_botonProcesoMarcado;
|
|||
//writeln(g_botonProcesoMarcado)
|
|||
end;
|
|||
procedure TfrmMain.btnReintentarTodosClick(Sender: TObject);
|
|||
begin
|
|||
if Mensaje('¿Deseas volver a enviar este proceso a los equipos que aún no han devuelto resultado?',sino)=2 then exit;
|
|||
g_botonProcesoMarcado:=-1;
|
|||
f_ordentodos:=g_botonProcesoMarcado;
|
|||
f_equipoEjecutandoProceso:=-1;
|
|||
RepetirProceso(g_botonProcesoMarcado);
|
|||
end;
|
|||
procedure TfrmMain.btnTodosClick(Sender: TObject);
|
|||
var
|
|||
textoTodos:TStringList;
|
|||
i:integer;
|
|||
datos:String;
|
|||
comandoE:String;
|
|||
textoNoConsulta:String;
|
|||
begin
|
|||
textoTodos:=TStringList.Create;
|
|||
case g_tipo_comando of
|
|||
-1:
|
|||
begin
|
|||
comandoE:='Ejecutar proceso: '+ HTTPDecode(equipoAdministrador.Procesos );
|
|||
textoNoConsulta:='Este equipo no ha realizado la consulta';
|
|||
end;
|
|||
0:
|
|||
begin
|
|||
comandoE:='Enviar archivo: '+ ExtractFileName(HTTPDecode(equipoAdministrador.Procesos ));
|
|||
textoNoConsulta:='En este equipo no se ha copiado el archivo por estar apagado o averiado';
|
|||
end;
|
|||
1:
|
|||
begin
|
|||
comandoE:='Instalar Paquete debian: '+ ExtractFileName(HTTPDecode(equipoAdministrador.Procesos ));
|
|||
textoNoConsulta:='En este equipo no se ha instalado el paquete debian por estar apagado o averiado';
|
|||
end;
|
|||
2:
|
|||
begin
|
|||
comandoE:='Ejecutar script: '+ ExtractFileName(HTTPDecode(equipoAdministrador.Procesos ));
|
|||
textoNoConsulta:='En este equipo no se ha ejecutado el script por estar apagado o averiado'
|
|||
end;
|
|||
3:
|
|||
begin
|
|||
comandoE:='Enviar carpeta: '+ ExtractFileName(HTTPDecode(equipoAdministrador.Procesos ));
|
|||
textoNoConsulta:='Este equipo no se ha copiado la carpeta seleccionada por estar apagado o averiado'
|
|||
end;
|
|||
end;
|
|||
textoTodos.Add('#################################################################');
|
|||
textoTodos.Add(comandoE);
|
|||
textoTodos.Add('Fecha: ' +DateToStr(Date())+' '+ TimeToStr(Time()) );
|
|||
textoTodos.Add('#################################################################');
|
|||
textoTodos.Add(' ');
|
|||
lblAccionEjecutada.Caption:='Acción realizada-> '+ comandoE;
|
|||
lblHost.Caption:='Todos los equipos';
|
|||
lblIP.Caption:='';
|
|||
lblMAC.Caption:='';
|
|||
for i:=0 to g_num_servidores_aula -1 do
|
|||
begin
|
|||
if Trim(equipoServidorAula[i].mihost)<>'' then
|
|||
begin
|
|||
textoTodos.Add(' ');
|
|||
datos:= 'Equipo: '+equipoServidorAula[i].mihost+'; IP: '+equipoServidorAula[i].ip+'; MAC: '+equipoServidorAula[i].mac+'; Grupo: '+ equipoServidorAula[i].dominio+'; Aula: '+ equipoServidorAula[i].CURSO;
|
|||
textoTodos.Add(datos);
|
|||
textoTodos.Add('======================================================================');
|
|||
if equipoServidorAula[i].ProcesoHace then
|
|||
textoTodos.Add(equipoServidorAula[i].ProcesoResultado)
|
|||
else
|
|||
textoTodos.Add(textoNoConsulta);
|
|||
textoTodos.Add(' ');
|
|||
textoTodos.Add('#################################################################');
|
|||
textoTodos.Add(' ');
|
|||
end
|
|||
end;
|
|||
meProceso1.Text:=textoTodos.Text;
|
|||
//meProceso1.SetFocus;
|
|||
textoTodos.Free;
|
|||
end;
|
|||
procedure TfrmMain.Calculadora1Click(Sender: TObject);
|
|||
const
|
|||
P_CALCU:string='gnome-calculator';
|
|||
begin
|
|||
ordenesaula(ORD_EJECUTAR_EN_ADMINISTRADOR,[P_CALCU]);
|
|||
end;
|
|||
function TfrmMain.ConvierteValorCombo(texto:String):integer;
|
|||
var
|
|||
valor:integer;
|
|||
begin
|
|||
valor:=SLEEP_MEDIO;
|
|||
try
|
|||
try
|
|||
valor:= round(StrToFloat(texto) * 1000);
|
|||
except
|
|||
valor:=SLEEP_ALTO;
|
|||
//writeln('Error al convertir el texto');
|
|||
end;
|
|||
finally
|
|||
Result:=valor;
|
|||
end;
|
|||
end;
|
|||
function TfrmMain.PausaEquipo(tipo:integer;estado:Boolean; actividad:TEstadoActividadEquipo): integer;
|
|||
var
|
|||
valor:integer;
|
|||
begin
|
|||
try
|
|||
valor:=SLEEP_MINIMO;
|
|||
if (tipo<>-1) or (actividad in [eApagado,eAveriado,eEncendiendo,eApagando]) then
|
|||
begin
|
|||
result:=SLEEP_MINIMO * g_factor_velocidad;
|
|||
exit;
|
|||
end;
|
|||
case f_PantallaActiva of
|
|||
0:
|
|||
begin
|
|||
if not estado then valor:=SLEEP_BAJO * g_factor_velocidad;
|
|||
end;
|
|||
3:
|
|||
begin
|
|||
if actividad = eUsuario then
|
|||
begin
|
|||
if estado then
|
|||
valor:=SLEEP_ALTO * g_factor_velocidad
|
|||
else
|
|||
valor:=SLEEP_MEDIO * g_factor_velocidad;
|
|||
end;
|
|||
end;
|
|||
4,5:
|
|||
begin
|
|||
if actividad = eUsuario then
|
|||
begin
|
|||
if estado then valor:=SLEEP_MAXIMO * g_factor_velocidad;
|
|||
end;
|
|||
end;
|
|||
6:
|
|||
begin
|
|||
if estado then valor:=ConvierteValorCombo(cboIntervaloP6.text);
|
|||
end;
|
|||
7:
|
|||
begin
|
|||
if estado then valor:=ConvierteValorCombo(cboIntervaloP7.text);
|
|||
end;
|
|||
end;
|
|||
finally
|
|||
//writeln ('Valor intervalo, ', valor );
|
|||
result:=valor ;
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.cboIntervaloP6KeyPress(Sender: TObject; var Key: char);
|
|||
begin
|
|||
key:=#0;
|
|||
end;
|
|||
procedure TfrmMain.deCarpetasChange(Sender: TObject);
|
|||
begin
|
|||
Application.ProcessMessages;
|
|||
if directoryexists(deCarpetas.directory) then
|
|||
g_carpeta_enviar_path:=deCarpetas.directory;
|
|||
end;
|
|||
procedure TfrmMain.deCarpetasRootChange(Sender: TObject);
|
|||
begin
|
|||
Application.ProcessMessages;
|
|||
if (fileexists(deCarpetasRoot.directory)) and (Length (Trim(deCarpetasRoot.directory))>0) then
|
|||
begin
|
|||
g_carpeta_enviar_path_root:=deCarpetasRoot.directory;
|
|||
end
|
|||
end;
|
|||
procedure TfrmMain.deCarpetasRootKeyPress(Sender: TObject; var Key: char);
|
|||
begin
|
|||
key:=#0;
|
|||
end;
|
|||
procedure TfrmMain.dlBuscarFind(Sender: TObject);
|
|||
var
|
|||
textoTemp : string;
|
|||
poscionTextoBuscado : integer;
|
|||
begin
|
|||
with TFindDialog(Sender) do
|
|||
begin
|
|||
if posicionSelecFinal = 0 then
|
|||
Options := Options - [frFindNext];
|
|||
if frfindNext in Options then
|
|||
begin
|
|||
poscionTextoBuscado := posicionSelecFinal + Length(Findtext);
|
|||
textoTemp := Copy(meProceso1.Lines.Text, poscionTextoBuscado, MaxInt);
|
|||
end
|
|||
else
|
|||
begin
|
|||
textoTemp := meProceso1.Lines.Text;
|
|||
poscionTextoBuscado := 1;
|
|||
end;
|
|||
posicionSelecFinal := Pos(FindText, textoTemp);
|
|||
if posicionSelecFinal > 0 then
|
|||
begin
|
|||
posicionSelecFinal := posicionSelecFinal + poscionTextoBuscado - 1;
|
|||
meProceso1.SelStart := posicionSelecFinal - 1;
|
|||
meProceso1.SelLength := Length(FindText);
|
|||
meProceso1.SetFocus;
|
|||
end
|
|||
else
|
|||
begin
|
|||
if frfindNext in Options then
|
|||
textoTemp := Concat('No hay más coincidencias de "', FindText, '" en el texto.')
|
|||
else
|
|||
textoTemp := Concat('No se ha encontrado "', FindText, '" en el texto.');
|
|||
Mensaje(textoTemp,Aceptar);
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.edPasswordKeyPress(Sender: TObject; var Key: char);
|
|||
begin
|
|||
if Key=#13 then btnAceptarClick(btnAceptar);
|
|||
end;
|
|||
procedure TfrmMain.fnArchivoRootChange(Sender: TObject);
|
|||
begin
|
|||
if (fileexists(fnArchivoRoot.filename)) and (Length(Trim(fnArchivoRoot.FileName))>0) then
|
|||
begin
|
|||
g_archivo_nombre_root:=ExtractFilename(fnArchivoRoot.filename);
|
|||
case f_tipo_envio of
|
|||
1:
|
|||
begin
|
|||
if RightStr(g_archivo_nombre_root,4)<>'.deb' then
|
|||
begin
|
|||
mensaje('El archivo elegido no es un paquete debian',aceptar);
|
|||
g_archivo_nombre_root:='';
|
|||
fnArchivoRoot.filename:=''
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
end
|
|||
end;
|
|||
procedure TfrmMain.fnArchivoRootKeyPress(Sender: TObject; var Key: char);
|
|||
begin
|
|||
key:=#0;
|
|||
end;
|
|||
procedure TfrmMain.fnScriptChange(Sender: TObject);
|
|||
begin
|
|||
if (fileexists(fnScript.filename)) and (Length(Trim(fnScript.FileName))>0) then
|
|||
begin
|
|||
if RightStr(fnScript.FileName,3)<>'.sh' then
|
|||
begin
|
|||
fnScript.filename:='';
|
|||
mensaje('El script elegido tiene que tener extesión .sh',aceptar);
|
|||
g_archivo_nombre_root:='';
|
|||
meScript.text:='';
|
|||
end
|
|||
else
|
|||
begin
|
|||
try
|
|||
meScript.Lines.LoadFromFile(fnScript.filename);
|
|||
g_archivo_nombre_root:=ExtractFilename(fnScript.filename);
|
|||
except
|
|||
g_archivo_nombre_root:='';
|
|||
fnScript.filename:='';
|
|||
mensaje('El script tiene un formato no válido',aceptar);
|
|||
meScript.text:='';
|
|||
//
|
|||
end
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.FormDestroy(Sender: TObject);
|
|||
begin
|
|||
Ejecutar('killall adtos &');
|
|||
end;
|
|||
procedure TfrmMain.fnArchivoChange(Sender: TObject);
|
|||
begin
|
|||
if fileexists(fnArchivo.filename) then
|
|||
g_archivo_nombre:=ExtractFilename(fnArchivo.filename);
|
|||
end;
|
|||
Procedure TfrmMain.DesmarcarMenus();
|
|||
var
|
|||
i:integer;
|
|||
begin
|
|||
for i:=0 to ComponentCount-1 do
|
|||
if (Components[i] is Tmenuitem) then (Components[i] as Tmenuitem).checked:=false;
|
|||
end;
|
|||
procedure TfrmMain.MenusClick(MenuPulsado:Tmenuitem;PantallaNumero:integer;GbParametros:TPanel;BotonHerramientas:Tspeedbutton);
|
|||
begin
|
|||
if TodosApagados then exit;
|
|||
MostrarPanel(GbParametros);
|
|||
DesmarcarMenus;
|
|||
MenuPulsado.Checked:=true;
|
|||
BotonHerramientas.Down:=true;
|
|||
ComprobarEstadoOrdenadores(PantallaNumero);
|
|||
Application.ProcessMessages;
|
|||
//writeln(' Por funcion MenusClick, sigo bien');
|
|||
end;
|
|||
Procedure TfrmMain.ComprobarEstadoOrdenadores(numero_pantalla:integer);
|
|||
var
|
|||
j:integer;
|
|||
begin
|
|||
lblinfo.Caption:=NOMBRE_PANTALLA[numero_pantalla];
|
|||
btnAndar.Caption:=CAPTION_BOTONES_ACTIVOS[numero_pantalla];
|
|||
btnparar.Caption:=CAPTION_BOTONES_INACTIVOS[numero_pantalla];
|
|||
btnparar.Enabled:=true;
|
|||
btnandar.Enabled:=true;
|
|||
pintarlogos(numero_pantalla);
|
|||
Application.ProcessMessages;
|
|||
g_cambiando_menu:=True;
|
|||
for j:=0 to g_num_servidores_aula-1 do
|
|||
begin
|
|||
RefrescarEquipoAulaNuevo(j);
|
|||
end;
|
|||
g_cambiando_menu:=false;
|
|||
Application.ProcessMessages;
|
|||
end;
|
|||
procedure TfrmMain.MostrarPanel(gb:TPanel);
|
|||
var
|
|||
i:integer;
|
|||
begin
|
|||
if (gb as TPanel).Name<>'pnEnc' then
|
|||
gb.BringToFront;
|
|||
gb.Visible:=true;
|
|||
for i:=0 to ControlCount-1 do
|
|||
if (Controls[i] is Tpanel) then
|
|||
if (Controls[i] as Tpanel).name<>(gb as TPanel).Name then
|
|||
(Controls[i] as Tpanel).visible:=false;
|
|||
btnandar.visible:=not ((gb as TPanel).Name='pnAlu');
|
|||
btnparar.visible:=not ((gb as TPanel).Name='pnAlu');
|
|||
pnPresenta.Visible:=false;
|
|||
end;
|
|||
Function TfrmMain.TodosApagados():boolean;
|
|||
var
|
|||
i:integer;
|
|||
inactivar:boolean;
|
|||
begin
|
|||
inactivar:=false;
|
|||
if (not (f_PantallaActiva in [0,6,7])) then
|
|||
begin
|
|||
inactivar:=true;
|
|||
for i:=0 to g_num_servidores_aula -1 do
|
|||
if (equipoServidorAula[i].EstadoActivadEquipo in [eUsuario] )then inactivar:=false;
|
|||
if inactivar then
|
|||
begin
|
|||
Mensaje(MEN_NO_ENCENDIDOS,aceptar);
|
|||
f_PantallaActiva:=0;
|
|||
spEnc.Down:=true;
|
|||
end;
|
|||
end;
|
|||
result:=inactivar;
|
|||
end;
|
|||
Procedure TfrmMain.IniciarPrograma();
|
|||
begin
|
|||
hallaEquiposDominio();
|
|||
if FileExists('/var/lib/adtos/grupos.ini') then
|
|||
LeerFicheroCursos()
|
|||
else
|
|||
CrearGruposDominio();
|
|||
cargaGruposEquipos();
|
|||
IniciarVariables();
|
|||
CrearColocarComponentes();
|
|||
mnuAulas.Visible:=false;
|
|||
ColocarPaneles();
|
|||
pintarlogos(f_PantallaActiva);
|
|||
pnPresenta.BringToFront;
|
|||
meTexArc.Lines.Add('Has recibido un archivo del administrador informático. Lo encontrarás en la carpeta recibidos_administrador de tu directorio personal');
|
|||
Application.ProcessMessages;
|
|||
end;
|
|||
procedure TfrmMain.pintarlogos(numero_pantalla:integer);
|
|||
begin
|
|||
with imgico do
|
|||
begin
|
|||
Stretch:=true;
|
|||
Picture.Bitmap.clear;
|
|||
imllogos.Getbitmap(numero_pantalla,picture.bitmap);
|
|||
end;
|
|||
end;
|
|||
Procedure TfrmMain.IniciarVariables;
|
|||
begin
|
|||
setlength(Ordenata,g_num_ord_pantalla);
|
|||
setlength(lblOrdenata,g_num_ord_pantalla);
|
|||
SetLength(pgOrdenata,g_num_ord_pantalla);
|
|||
Setlength(lblmesa,g_num_ord_pantalla);
|
|||
Setlength(btnProceso,g_num_ord_pantalla);
|
|||
end;
|
|||
Procedure TfrmMain.CrearColocarComponentes();
|
|||
var
|
|||
numfbotproceso,i:integer;
|
|||
begin
|
|||
for i:=g_num_ord_pantalla-1 downto 0 do
|
|||
begin
|
|||
Ordenata[i]:= TImage.Create(self);
|
|||
with Ordenata[i] do
|
|||
begin
|
|||
width:=W_ORDENADOR;
|
|||
Height:=H_ORDENADOR;
|
|||
stretch:=true;
|
|||
Cursor:=crarrow;
|
|||
imlicodis.GetBitmap(0,Picture.Bitmap);
|
|||
Parent:=self;
|
|||
tag:=i;
|
|||
visible:=false;
|
|||
OnClick:=@OrdenataClick;
|
|||
OnMouseEnter:=@OrdenataMouseEnter;
|
|||
OnMouseDown:=@OrdenataMouseDown;
|
|||
OnDragOver:=@OrdenataDragOver;
|
|||
OnDragDrop:=@OrdenataDragDrop;
|
|||
PopupMenu:=poAula;
|
|||
if i< g_num_servidores_aula then
|
|||
if equipoServidorAula[i].EstadoActivadEquipo=eAveriado then
|
|||
enabled:=false;
|
|||
end;
|
|||
end;
|
|||
for i:=g_num_ord_pantalla-1 downto 0 do
|
|||
begin
|
|||
pgOrdenata[i]:= TColorProgress.Create(self);
|
|||
with pgOrdenata[i] do
|
|||
begin
|
|||
width:=W_ORDENADOR-12;
|
|||
Height:=5;
|
|||
ShowText:=false;
|
|||
MaxValue:=60;
|
|||
MinValue:=0;
|
|||
Progress:=0;
|
|||
ForeColor:=clYellow;
|
|||
BackColor:=clBlack;
|
|||
Cursor:=crHourGlass;
|
|||
Parent:=self;
|
|||
tag:=i;
|
|||
visible:=false;
|
|||
end;
|
|||
end;
|
|||
MostrarServidoresAulas();
|
|||
for i:=g_num_ord_pantalla-1 downto 0 do
|
|||
begin
|
|||
lblOrdenata[i]:= Tlabel.Create(self);
|
|||
with lblOrdenata[i] do
|
|||
begin
|
|||
autosize:=false;
|
|||
SetBounds(Ordenata[i].Left-5,Ordenata[i].top+Ordenata[i].height-5,Ordenata[i].Width+10,15);
|
|||
alignment:=tacenter;
|
|||
font.name:='Sans';
|
|||
font.size:=6;
|
|||
Font.Color:=rgb(0,0,0);
|
|||
caption:= 'Mesa ' + NumOrdLet(i);
|
|||
Parent:=self;
|
|||
layout:=tlcenter;
|
|||
Transparent:=true;
|
|||
visible:=true;
|
|||
end;
|
|||
end;
|
|||
for i:=g_num_ord_pantalla-1 downto 0 do
|
|||
begin
|
|||
lblmesa[i]:= Tlabel.Create(self);
|
|||
with lblmesa[i] do
|
|||
begin
|
|||
autosize:=false;
|
|||
SetBounds(Ordenata[i].Left-19,Ordenata[i].top,16,14);
|
|||
alignment:=taRightJustify;
|
|||
Font.Name:='Sans';
|
|||
Font.Size :=10;
|
|||
Font.Color:=rgb(100,100,100);
|
|||
Font.Color:=clsilver;
|
|||
caption:=inttostr(i+1);
|
|||
Parent:=self;
|
|||
//font.Style:=[fsbold];
|
|||
layout:=tlcenter;
|
|||
Transparent:=true;
|
|||
visible:=false;
|
|||
end;
|
|||
end;
|
|||
for i:= 0 to g_num_ord_pantalla-1 do
|
|||
begin
|
|||
btnProceso[i]:=TSpeedButton.Create(self);
|
|||
with btnProceso[i] do
|
|||
begin
|
|||
tag:=i;
|
|||
font.Name:='Sans';
|
|||
font.Size:=10;
|
|||
Visible:=false;
|
|||
flat:=false;
|
|||
Down:=false;
|
|||
GroupIndex:=1;
|
|||
width:=70;
|
|||
Height:=26;
|
|||
top:=50+ 28*(i div 12);
|
|||
left:=10 + 73 * (i mod 12);
|
|||
OnClick:=@btnProcesoClick;
|
|||
OnMouseDown:=@btnProcesoMouseDown;
|
|||
PopupMenu:=poRepetir;
|
|||
if i< g_num_servidores_aula then
|
|||
begin
|
|||
Enabled:=false;
|
|||
caption:=equipoServidorAula[i].mihost;
|
|||
Visible:=true;
|
|||
end;
|
|||
Cursor:=crarrow;
|
|||
Parent:=pnTodos;
|
|||
end;
|
|||
end;
|
|||
for i:=g_num_servidores_aula to g_num_ord_pantalla-1 do
|
|||
lblOrdenata[i].Caption:='';
|
|||
for i:=g_num_servidores_aula to g_num_ord_pantalla-1 do
|
|||
lblmesa[i].visible:=false;
|
|||
for i:=g_num_servidores_aula to g_num_ord_pantalla-1 do
|
|||
btnProceso[i].visible:=false;
|
|||
numfbotproceso:=g_num_servidores_aula div 12;
|
|||
lblHost.Top:=btnProceso[g_num_servidores_aula -1].top + btnProceso[g_num_servidores_aula -1].Height+10;
|
|||
lblMAC.Top:= lblHost.Top;
|
|||
lblIP.Top:= lblHost.Top;
|
|||
lblHost.Font.Color:=clNavy;
|
|||
lblIP.Font.Color:=clNavy;
|
|||
lblMAC.Font.Color:=clNavy;
|
|||
meProceso1.Top:=lblHost.Top+ lblHost.Height+10;
|
|||
meProceso1.Height:=btnTodos.top- meProceso1.top -20;
|
|||
end;
|
|||
Procedure TfrmMain.btnProcesoClick(sender:TObject);
|
|||
var
|
|||
botPul:integer;
|
|||
comandoE:String;
|
|||
begin
|
|||
botPul:=(sender as TSpeedButton).Tag;
|
|||
try
|
|||
case g_tipo_comando of
|
|||
-1: comandoE:='Ejecutar comando: '+ HTTPDecode(equipoAdministrador.Procesos );
|
|||
0: comandoE:='Enviar archivo: '+ ExtractFileName(HTTPDecode(equipoAdministrador.Procesos ));
|
|||
1: comandoE:='Instalar paquete debian: '+ ExtractFileName(HTTPDecode(equipoAdministrador.Procesos));
|
|||
2: comandoE:='Ejecutar script : '+ ExtractFileName(HTTPDecode(equipoAdministrador.Procesos));
|
|||
3: comandoE:='Enviar carpeta : '+ ExtractFileName(HTTPDecode(equipoAdministrador.Procesos));
|
|||
end;
|
|||
except
|
|||
comandoE:=HTTPDecode(equipoAdministrador.Procesos );
|
|||
end;
|
|||
lblAccionEjecutada.Caption:='Acción realizada-> '+ comandoE;
|
|||
lblHost.Caption:= 'Equipo: '+equipoServidorAula[botpul].mihost;
|
|||
lblIP.Caption:='IP: '+equipoServidorAula[botpul].IP;
|
|||
lblMAC.Caption:='MAC: '+equipoServidorAula[botpul].MAC;
|
|||
meProceso1.Clear;
|
|||
meProceso1.Lines.Add('#################################################################');
|
|||
meProceso1.Lines.Add('Equipo: '+equipoServidorAula[botpul].mihost+'; IP: '+equipoServidorAula[botpul].ip+'; MAC: '+equipoServidorAula[botpul].mac+'; Grupo: '+ equipoServidorAula[botpul].dominio+'; Aula: '+ equipoServidorAula[botpul].CURSO);
|
|||
meProceso1.Lines.Add(comandoE);
|
|||
meProceso1.Lines.Add('Fecha: ' +DateToStr(Date())+' '+ TimeToStr(Time()) );
|
|||
meProceso1.Lines.Add('#################################################################');
|
|||
meProceso1.Lines.Add(' ');
|
|||
meProceso1.Lines.add(equipoServidorAula[botpul].ProcesoResultado);
|
|||
end;
|
|||
procedure TfrmMain.EjecutarOrdenesFin(tipo:integer;estado:boolean;EnviarMensaje:boolean=false;asunto:string='Aviso';texto:string='Mensaje del Administrador');
|
|||
var
|
|||
misleep,i,inicio,fin:integer;
|
|||
begin
|
|||
inicio:=0;
|
|||
fin:=0;
|
|||
ObtenerInicioFin(tipo,inicio,fin);
|
|||
for i:=inicio to fin do
|
|||
begin
|
|||
if ((f_pantallaactiva in [3,4,5]) and(equipoServidorAula[i].IconoEquipo(0) <> 1)) or (not ordenata[i].Enabled) or (equipoServidorAula[i].EstadoActivadEquipo=eAveriado) or (equipoServidorAula[i].mihost='') then continue;
|
|||
misleep:=PausaEquipo(tipo,estado,equipoServidorAula[i].EstadoActivadEquipo);
|
|||
equipoServidorAula[i].ElegirOrden(f_pantallaactiva,estado);
|
|||
application.ProcessMessages;
|
|||
if f_PantallaActiva= 0 then
|
|||
begin
|
|||
if Not estado then
|
|||
begin
|
|||
equipoServidorAula[i].UsuarioActivo:='';
|
|||
lblOrdenata[i].Caption:=NombreUsuarioOrdenador(i)
|
|||
end;
|
|||
fcontadorbarra[i]:=0;
|
|||
PintarMonPant0(i);
|
|||
end
|
|||
else
|
|||
begin
|
|||
if estado then
|
|||
CambiarIconoActivo(i)
|
|||
else
|
|||
CambiarIconoInactivo(i);
|
|||
end;
|
|||
sleep(misleep);
|
|||
application.ProcessMessages;
|
|||
end
|
|||
end;
|
|||
function TfrmMain.HallaSleep(tipo:integer;estado:Boolean; actividad:TEstadoActividadEquipo):integer;
|
|||
var
|
|||
intervalo:integer;
|
|||
begin
|
|||
intervalo:=SLEEP_BAJO * g_factor_velocidad;
|
|||
if tipo<> -1 then
|
|||
intervalo:= SLEEP_BAJO * g_factor_velocidad
|
|||
else if (f_PantallaActiva=0) and (estado) and (actividad<>eApagado) then
|
|||
intervalo:= SLEEP_BAJO * g_factor_velocidad
|
|||
else if (f_PantallaActiva=0) and (estado) and (actividad=eApagado) then
|
|||
intervalo:= SLEEP_BAJO * g_factor_velocidad
|
|||
else if (f_PantallaActiva=0) and ( not estado) and (actividad in [eApagado, eAveriado,eEncendiendo,eApagando]) then
|
|||
intervalo:= SLEEP_BAJO * g_factor_velocidad
|
|||
else if (f_PantallaActiva=0) and ( not estado) and (actividad in [eEncendido, eUsuario]) then
|
|||
intervalo:= SLEEP_MEDIO * g_factor_velocidad
|
|||
else if ((not estado) and ( f_PantallaActiva in [3]))then
|
|||
intervalo:= SLEEP_MEDIO * g_factor_velocidad
|
|||
else if ((not estado) and ( f_PantallaActiva in [4,5,6,7])) then
|
|||
intervalo:=SLEEP_MINIMO * g_factor_velocidad
|
|||
else if ((estado) and ( f_PantallaActiva in [0,3,6])) then
|
|||
intervalo:= SLEEP_MEDIO * g_factor_velocidad
|
|||
else if ((estado) and ( f_PantallaActiva in [4,5,7])) then
|
|||
intervalo:= SLEEP_ALTO * g_factor_velocidad;
|
|||
Result:=intervalo;
|
|||
end;
|
|||
procedure TfrmMain.MensajeEnviado(ord_num:integer; asunto,texto:string);
|
|||
begin
|
|||
if f_PantallaActiva in [1,2,10,12,13] then
|
|||
begin
|
|||
g_mensaje_prioridad:='0';
|
|||
g_mensaje_asunto:=HTTPEncode(asunto);
|
|||
g_mensaje_texto:=HTTPEncode(texto);
|
|||
equipoServidorAula[ord_num].mensaje();
|
|||
end;
|
|||
end;
|
|||
Procedure TfrmMain.CambiarIconoActivo(ord_num:integer);
|
|||
var
|
|||
activo:boolean;
|
|||
begin
|
|||
activo:=ordenata[ord_num].enabled;
|
|||
if activo then
|
|||
begin
|
|||
ordenata[ord_num].Picture.Bitmap.clear;
|
|||
imlIcoAct1.GetBitmap(f_PantallaActiva,ordenata[ord_num].Picture.Bitmap);
|
|||
end
|
|||
end;
|
|||
procedure TfrmMain.CambiarIconoInactivo(ord_num:integer);
|
|||
var
|
|||
activo:boolean;
|
|||
begin
|
|||
activo:=ordenata[ord_num].enabled;
|
|||
if activo then
|
|||
begin
|
|||
ordenata[ord_num].Picture.Bitmap.clear;
|
|||
imlicoina.GetBitmap(f_PantallaActiva,ordenata[ord_num].Picture.Bitmap);
|
|||
end
|
|||
end;
|
|||
procedure TfrmMain.ObtenerInicioFin(ord_num:integer;var inicio:integer; var fin:integer);
|
|||
begin
|
|||
if (ord_num=-1) then
|
|||
inicio:=0
|
|||
else
|
|||
inicio:=ord_num;
|
|||
if (ord_num=-1) then
|
|||
fin:=g_num_servidores_aula-1
|
|||
else
|
|||
fin:=ord_num;
|
|||
end;
|
|||
Procedure TfrmMain.OrdenataClick(sender:TObject);
|
|||
var
|
|||
ordpul:integer;
|
|||
begin
|
|||
ordpul:=(sender as Timage).Tag;
|
|||
if equipoServidorAula[ordpul].fIconoMonitor[f_PantallaActiva]=0 then
|
|||
begin
|
|||
f_ordentodos:=ordpul;
|
|||
if validarcontenido(f_PantallaActiva)=false then exit;
|
|||
equipoServidorAula[ordpul].fIconoMonitor[f_PantallaActiva]:=1;
|
|||
Iniciaractividad(f_PantallaActiva,ordpul);
|
|||
end
|
|||
else if equipoServidorAula[ordpul].fIconoMonitor[f_PantallaActiva]=1 then
|
|||
begin
|
|||
if f_PantallaActiva =0 then
|
|||
begin
|
|||
if (Length(Trim(g_contraServidores)) <1) then
|
|||
begin
|
|||
mensaje(MEN_CONTRA_SERVIDORES_AULA, aceptar);
|
|||
exit;
|
|||
end;
|
|||
if Mensaje('¿Deseas apagar este equipo?',sino)=2 then
|
|||
exit
|
|||
end;
|
|||
equipoServidorAula[ordpul].fIconoMonitor[f_PantallaActiva]:=0;
|
|||
DetenerActividad(f_PantallaActiva,ordpul);
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.recolocaComponetesMovido(numOrd:integer);
|
|||
begin
|
|||
pgOrdenata[numOrd].SetBounds(Ordenata[numOrd].Left+6, (Ordenata[numOrd].top+((Ordenata[numOrd].height div 12)*7)),(Ordenata[numOrd].Width-12),8);
|
|||
lblOrdenata[numOrd].SetBounds(Ordenata[numOrd].Left-5,Ordenata[numOrd].top+Ordenata[numOrd].height-5,Ordenata[numOrd].Width+10,15);
|
|||
lblMesa[numOrd].SetBounds(Ordenata[numOrd].Left-19,Ordenata[numOrd].top,16,14);
|
|||
end;
|
|||
procedure TfrmMain.OrdenataDragDrop(Sender, Source: TObject; X, Y: Integer);
|
|||
begin
|
|||
numOrdD:=Timage(sender).Tag;
|
|||
(source as Timage).SetBounds((sender as Timage).left, (sender as Timage).top, (sender as Timage).width,(sender as Timage).height);
|
|||
(Sender as Timage).SetBounds(PuntoO.x, PuntoO.y, (source as Timage).width,(source as Timage).height);
|
|||
recolocaComponetesMovido(numOrdO);
|
|||
recolocaComponetesMovido(numOrdD);
|
|||
end;
|
|||
procedure TfrmMain.OrdenataDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
|
|||
begin
|
|||
Accept:= (Source is TImage);
|
|||
end;
|
|||
procedure TfrmMain.OrdenataMouseDown(Sender: TObject;
|
|||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|||
begin
|
|||
if button = mbLeft then
|
|||
begin
|
|||
numOrdO:= TImage(sender).tag;
|
|||
PuntoO:=Point(TImage(Sender).Left,TImage(Sender).top);
|
|||
TImage(Sender).BeginDrag(false,30)
|
|||
end
|
|||
else
|
|||
begin
|
|||
f_equipoAulaBotonDerecho:=TImage(sender).tag;
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.OrdenataMouseEnter(Sender: TObject);
|
|||
var
|
|||
numeord:integer;
|
|||
begin
|
|||
numeord:=(sender as Timage).tag;
|
|||
(sender as Timage).ShowHint:=false;
|
|||
if (g_mostrarNombreUsuario) then
|
|||
begin
|
|||
if (equipoServidorAula[numeord].EstadoActivadEquipo=eUsuario) then
|
|||
(sender as Timage).Hint:='Usuario: ' +equipoServidorAula[numeord].UsuarioActivo
|
|||
else
|
|||
(sender as Timage).Hint:='Equipo: '+equipoServidorAula[numeord].mihost;
|
|||
(sender as Timage).ShowHint:=(Trim(equipoServidorAula[numeord].mihost)<>'');
|
|||
end;
|
|||
end;
|
|||
Procedure TfrmMain.IniciarActividad(numero_pantalla:integer;ord_num:integer);
|
|||
begin
|
|||
case numero_pantalla of
|
|||
0:EquipoAulaEncender(ord_num);
|
|||
3:ProfeAulaMensaje(ord_num);
|
|||
4:ProfeAulaArchivo(ord_num);
|
|||
5:ProfeAulaCarpeta(ord_num);
|
|||
6:begin
|
|||
f_equipoEjecutandoProceso:=ord_num;
|
|||
EquipoAulaComando(ord_num);
|
|||
end;
|
|||
7:begin
|
|||
f_equipoEjecutandoProceso:=ord_num;
|
|||
EquipoAulaArchivoRoot(ord_num)
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
Procedure TfrmMain.DetenerActividad(numero_pantalla:integer;ord_num:integer);
|
|||
begin
|
|||
case numero_pantalla of
|
|||
0:EquipoAulaEncenderNo(ord_num);
|
|||
3:ProfeAulaMensajeNo(ord_num);
|
|||
4:ProfeAulaArchivoNo(ord_num);
|
|||
5:ProfeAulaCarpetaNo(ord_num);
|
|||
6:EquipoAulaComandoNo(ord_num);
|
|||
7:EquipoAulaArchivoRootNo(ord_num);
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.despulsarMonitores(numero_pant:integer);
|
|||
var
|
|||
i:integer;
|
|||
begin
|
|||
for i:=0 to high(equipoServidorAula) do
|
|||
begin
|
|||
if equipoServidorAula[i].EstadoActivadEquipo<>eAveriado then
|
|||
equipoServidorAula[i].fMonitorPulsado[numero_pant]:=false;
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.pulsarMonitores(numero_pant:integer);
|
|||
var
|
|||
i:integer;
|
|||
begin
|
|||
for i:=0 to high(equipoServidorAula) do
|
|||
begin
|
|||
if equipoServidorAula[i].EstadoActivadEquipo<>eAveriado then
|
|||
equipoServidorAula[i].fMonitorPulsado[numero_pant]:=true;
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.OrdenRestablecerTodos(numero_pantalla:integer);
|
|||
begin
|
|||
cursor:=crHourGlass;
|
|||
Enabled:=false;
|
|||
tmrPingEstadoCentro.Enabled:=false;
|
|||
try
|
|||
pulsarMonitores(numero_pantalla);
|
|||
case numero_pantalla of
|
|||
0:EquipoAulaEncenderNo(-1);
|
|||
3:ProfeAulaMensajeNo(-1);
|
|||
4:ProfeAulaArchivoNo(-1);
|
|||
5:ProfeAulaCarpetaNo(-1);
|
|||
6:EquipoAulaComandoNo(-1);
|
|||
7:EquipoAulaArchivoRootNo(-1);
|
|||
end;
|
|||
finally
|
|||
begin
|
|||
Enabled:=true;
|
|||
cursor:=crarrow;
|
|||
tmrPingEstadoCentro.Enabled:=true;
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.OrdenEjecutarTodos(numero_pantalla:integer);
|
|||
begin
|
|||
cursor:=crHourGlass;
|
|||
enabled:=false;
|
|||
tmrPingEstadoCentro.Enabled:=false;
|
|||
try
|
|||
despulsarMonitores(numero_pantalla);
|
|||
case numero_pantalla of
|
|||
0:EquipoAulaEncender(-1);
|
|||
3:ProfeAulaMensaje(-1);
|
|||
4:ProfeAulaArchivo(-1);
|
|||
5:ProfeAulaCarpeta(-1);
|
|||
6:begin
|
|||
f_equipoEjecutandoProceso:=-1;
|
|||
EquipoAulaComando(-1);
|
|||
end;
|
|||
7:begin
|
|||
f_equipoEjecutandoProceso:=-1;
|
|||
EquipoAulaArchivoRoot(-1);
|
|||
end;
|
|||
end;
|
|||
finally
|
|||
begin
|
|||
tmrPingEstadoCentro.Enabled:=true;
|
|||
Enabled:=true;
|
|||
cursor:=crArrow;
|
|||
end;
|
|||
end
|
|||
end;
|
|||
Function TfrmMain.ValidarContenido(PantallaActual:integer):boolean;
|
|||
begin
|
|||
result:=true;
|
|||
case PantallaActual of
|
|||
3:
|
|||
begin
|
|||
if ((length(trim(metexmen.Text))<1) or (length(trim(edasumen.Text))<1)) then
|
|||
begin
|
|||
mensaje(MEN_ESCRIBE_MENSAJE,aceptar);
|
|||
result:=false;
|
|||
end;
|
|||
end;
|
|||
4:
|
|||
begin
|
|||
if rightstr(fnArchivo.FileName,2)='/*' then
|
|||
begin
|
|||
mensaje(MEN_ERROR_COPIA_CARPETA,aceptar);
|
|||
result:=true;
|
|||
exit;
|
|||
end;
|
|||
if not fileexists(fnArchivo.FileName) then
|
|||
begin
|
|||
mensaje(MEN_NO_EXISTE_ARCHIVO,aceptar);
|
|||
result:=false;
|
|||
exit;
|
|||
end;
|
|||
if length(trim(meTexArc.Text))<1 then
|
|||
begin
|
|||
mensaje(MEN_ESCRIBE_MENSAJE,aceptar);
|
|||
result:=false;
|
|||
end;
|
|||
end;
|
|||
5:
|
|||
begin
|
|||
if ((length(trim(mecarpertas.Text))<1)) then
|
|||
begin
|
|||
mensaje(MEN_ESCRIBE_MENSAJE,aceptar);
|
|||
result:=false;
|
|||
end
|
|||
else if (length(decarpetas.directory)< 2) or (not directoryexists(decarpetas.directory)) then
|
|||
begin
|
|||
mensaje(MEN_ELIGE_DIRECTORIO,aceptar);
|
|||
result:=false;
|
|||
end
|
|||
end;
|
|||
6:
|
|||
begin
|
|||
result:=ValidarProcesoAsi();
|
|||
end;
|
|||
7:
|
|||
begin
|
|||
result:=ValidarProcesoArchivoRoot();
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
Function TfrmMain.ValidarProcesoArchivoRoot():Boolean;
|
|||
var
|
|||
i:integer;
|
|||
respuesta:Boolean;
|
|||
procesoAnterior:String;
|
|||
begin
|
|||
respuesta:=true;
|
|||
if Length(Trim(edCarpetaDestino.text))<1 then
|
|||
begin
|
|||
mensaje('Indica la carpeta de destino',aceptar);
|
|||
result:=false;
|
|||
exit;
|
|||
end;
|
|||
case f_tipo_envio of
|
|||
0:
|
|||
begin
|
|||
if not fileexists(fnArchivoRoot.FileName) then
|
|||
begin
|
|||
mensaje(MEN_NO_EXISTE_ARCHIVO,aceptar);
|
|||
result:=false;
|
|||
exit;
|
|||
end;
|
|||
end;
|
|||
3:
|
|||
begin
|
|||
if (length(deCarpetasRoot.directory)< 2) or (not directoryexists(deCarpetasRoot.directory)) then
|
|||
begin
|
|||
mensaje(MEN_ELIGE_DIRECTORIO,aceptar);
|
|||
result:=false;
|
|||
exit;
|
|||
end;
|
|||
if (length(edCarpetaDestino.Text)<1) then
|
|||
begin
|
|||
mensaje('Indica la carpeta de destino',aceptar);
|
|||
result:=false;
|
|||
exit;
|
|||
end
|
|||
end;
|
|||
1:
|
|||
begin
|
|||
if not fileexists(fnArchivoRoot.FileName) then
|
|||
begin
|
|||
mensaje(MEN_NO_EXISTE_ARCHIVO,aceptar);
|
|||
result:=false;
|
|||
exit;
|
|||
end
|
|||
else if (RightStr(fnArchivoRoot.FileName,3)<>'deb') then
|
|||
begin
|
|||
mensaje('El archivo seleccionado no es un paquete debian',aceptar);
|
|||
result:=false;
|
|||
exit;
|
|||
end
|
|||
end;
|
|||
end;
|
|||
case f_tipo_envio of
|
|||
0:
|
|||
begin
|
|||
if mensaje('¿Desea copiar el archivo ' + fnArchivoRoot.FileName +' en la caperta '+ edCarpetaDestino.text +' de los equipos elegidos?' ,SiNo)=2 then
|
|||
begin
|
|||
result:=false;
|
|||
exit;
|
|||
end;
|
|||
end;
|
|||
1:
|
|||
begin
|
|||
if mensaje('¿Desea instalar el paquete ' + fnArchivoRoot.FileName +' en los equipos elegidos?' ,SiNo)=2 then
|
|||
begin
|
|||
result:=false;
|
|||
exit;
|
|||
end
|
|||
end;
|
|||
3:
|
|||
begin
|
|||
if mensaje('¿Desea ejecutar copiar la carpeta ' +deCarpetasRoot.Directory+' en el directorio '+ edCarpetaDestino.text +' de los equipos elegidos?' ,SiNo)=2 then
|
|||
begin
|
|||
result:=false;
|
|||
exit;
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
respuesta:=CompruebaProcesosActivos();
|
|||
if respuesta then
|
|||
begin
|
|||
Randomize;
|
|||
equipoAdministrador.RealizandoProcesos:=false;
|
|||
tmrRecogidaProcesos.Enabled:=false;
|
|||
tmrRecogidaProcesos1.Enabled:=false;
|
|||
f_contador_procesos:=TIEMPO_PROCESOS;
|
|||
f_contador_procesos_ver:=TIEMPO_PROCESOS*5;
|
|||
g_tipo_comando:=f_tipo_envio;
|
|||
procesoAnterior:=equipoAdministrador.Procesos;
|
|||
case g_tipo_comando of
|
|||
0:
|
|||
begin
|
|||
if equipoAdministrador.Procesos<> Trim(HTTPEncode(fnArchivoRoot.FileName)) then
|
|||
begin
|
|||
equipoAdministrador.IdProcesos:='A-'+IntToStr(Random(100000000));
|
|||
equipoAdministrador.Procesos:=Trim(HTTPEncode(fnArchivoRoot.FileName));
|
|||
end
|
|||
end;
|
|||
3:
|
|||
begin
|
|||
if equipoAdministrador.Procesos<> Trim(HTTPEncode(deCarpetasRoot.Directory)) then
|
|||
begin
|
|||
equipoAdministrador.IdProcesos:='C-'+IntToStr(Random(100000000));
|
|||
equipoAdministrador.Procesos:=Trim(HTTPEncode(deCarpetasRoot.Directory));
|
|||
g_carpeta_enviar_path:=deCarpetasRoot.Directory;
|
|||
end;
|
|||
end;
|
|||
1:
|
|||
begin
|
|||
if equipoAdministrador.Procesos<> Trim(HTTPEncode(fnArchivoRoot.FileName)) then
|
|||
begin
|
|||
equipoAdministrador.IdProcesos:='D-'+IntToStr(Random(100000000));
|
|||
equipoAdministrador.Procesos:=Trim(HTTPEncode(fnArchivoRoot.FileName));
|
|||
end
|
|||
end;
|
|||
end;
|
|||
if equipoAdministrador.Procesos<> procesoAnterior then
|
|||
begin
|
|||
if f_PantallaActiva=6 then EquipoAulaComandoNo(-1);
|
|||
for i:=0 to High(equipoServidorAula) do
|
|||
begin
|
|||
btnProceso[i].Enabled:=false;
|
|||
btnProceso[i].Font.Color:=clBlack;
|
|||
end;
|
|||
end;
|
|||
if f_ordentodos = -1 then
|
|||
begin
|
|||
for i:=0 to High(equipoServidorAula) do
|
|||
begin
|
|||
if equipoServidorAula[i].EstadoActivadEquipo in [eEncendido,eEncendiendo,eUsuario,eApagando] then
|
|||
begin
|
|||
equipoServidorAula[i].ProcesoHace:=true;
|
|||
equipoServidorAula[i].ProcesoTerminado:=false;
|
|||
equipoServidorAula[i].ProcesoId:=equipoAdministrador.IdProcesos;
|
|||
end
|
|||
else
|
|||
begin
|
|||
equipoServidorAula[i].ProcesoHace:=false;
|
|||
equipoServidorAula[i].ProcesoTerminado:=true;
|
|||
equipoServidorAula[i].ProcesoId:='S';
|
|||
end
|
|||
end;
|
|||
end
|
|||
else
|
|||
begin
|
|||
equipoServidorAula[f_ordentodos].ProcesoHace:=true;
|
|||
equipoServidorAula[f_ordentodos].ProcesoTerminado:=false;
|
|||
equipoServidorAula[f_ordentodos].ProcesoId:=equipoAdministrador.IdProcesos;
|
|||
end;
|
|||
g_archivo_nombre_root:=ExtractFilename(fnArchivoRoot.filename);
|
|||
equipoAdministrador.RealizandoProcesos:=true;
|
|||
lblTiempoProceso.Caption:='';
|
|||
tmrRecogidaProcesos.Enabled:=true;
|
|||
tmrRecogidaProcesos1.Enabled:=true;
|
|||
lblTiempoProceso.Visible:=true;
|
|||
lblTiempoProceso.BringToFront;
|
|||
g_pantalla_proceso:=7;
|
|||
////writeln('validar proceso ',equipoAdministrador.Procesos,' ',equipoAdministrador.IdProcesos);
|
|||
end;
|
|||
////writeln(respuesta);
|
|||
result:=respuesta;
|
|||
end;
|
|||
procedure TfrmMain.MostrarServidoresAulas();
|
|||
var
|
|||
tor,wo,ho,lb,tb :integer;
|
|||
spt,i,numsep,numfilas:integer;
|
|||
begin
|
|||
wo:=g_Distribuciones[g_TipoAula].ancho;
|
|||
ho:=g_Distribuciones[g_TipoAula].alto;
|
|||
tor:=g_Distribuciones[g_TipoAula].altura;
|
|||
numfilas:=(g_num_ord_pantalla div g_Distribuciones[g_TipoAula].numColumnas);
|
|||
numsep:=numfilas -1;
|
|||
spt:=(tor-(numfilas*ho)) div numsep;
|
|||
if g_tipoAula>= 7 then spt:=spt;
|
|||
for i:=g_num_ord_pantalla-1 downto 0 do
|
|||
begin
|
|||
tb:= i div g_Distribuciones[g_TipoAula].numColumnas;
|
|||
tb:= g_Distribuciones[g_TipoAula].altura-tb*(g_Distribuciones[g_TipoAula].alto+spt);
|
|||
lb:= i mod g_Distribuciones[g_TipoAula].numColumnas;
|
|||
lb:= g_Distribuciones[g_TipoAula].izquierda+ g_Distribuciones[g_TipoAula].sepH[lb];
|
|||
if i< g_num_servidores_aula then
|
|||
begin
|
|||
equipoServidorAula[i].L:=lb;
|
|||
equipoServidorAula[i].T:=tb;
|
|||
end;
|
|||
Ordenata[i].SetBounds(lb,tb,wo,ho);
|
|||
Ordenata[i].visible:=true;
|
|||
pgOrdenata[i].Width:=Ordenata[i].Width-12;
|
|||
pgOrdenata[i].Height:=8;
|
|||
pgOrdenata[i].left:=Ordenata[i].left+6;
|
|||
pgOrdenata[i].top:=Ordenata[i].top+((Ordenata[i].height div 12)*5);
|
|||
pgOrdenata[i].visible:=false;
|
|||
end;
|
|||
for i:=g_num_servidores_aula to g_num_ord_pantalla-1 do
|
|||
begin
|
|||
Ordenata[i].visible:=false;
|
|||
pgOrdenata[i].visible:=false;
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.CargarOrdenesRoot();
|
|||
begin
|
|||
if not fileexists(equipoAdministrador.ArcOrdenesRoot) then
|
|||
equipoAdministrador.creaArchivoOrdenes();
|
|||
Application.ProcessMessages;
|
|||
equipoAdministrador.LeerArchivoOrdenes();
|
|||
end;
|
|||
procedure TfrmMain.CargarConfiguracionCentro(archivoaula:string);
|
|||
var
|
|||
Mifichero:TMemIniFile;
|
|||
i:integer;
|
|||
nmord:string;
|
|||
dominio,curso,mhost,mip,mmac:string;
|
|||
mestado:boolean;
|
|||
begin
|
|||
try
|
|||
if FileExists(archivoaula) then
|
|||
begin
|
|||
Mifichero:= TMemIniFile.create(archivoaula);
|
|||
With Mifichero do
|
|||
begin
|
|||
nmord:=ReadString('Centro','Numero aulas','48');
|
|||
g_num_servidores_aula:=strtoint(nmord);
|
|||
g_velocidad_red:=ReadInteger('Centro','Velocidad red',1);
|
|||
g_factor_velocidad:= g_velocidad_red+1;
|
|||
cargaDistribuciones();
|
|||
g_ExploradorArchivos:=ReadString('Centro','Explorador archivos','nautilus');
|
|||
g_tipoAula :=9;
|
|||
if g_num_servidores_aula >54 then g_tipoAula :=10;
|
|||
g_num_ord_pantalla:=NumeroOrdenadorePantalla(g_TipoAula,g_num_servidores_aula);
|
|||
setlength(equipoServidorAula,g_num_servidores_aula);
|
|||
SetLength(g_EstadoAulasCentro,g_num_servidores_aula);
|
|||
SetLength(g_equiposAulas,g_num_servidores_aula);
|
|||
for i:=0 to g_num_ord_pantalla-1 do
|
|||
begin
|
|||
if i < g_num_servidores_aula then
|
|||
begin
|
|||
mestado :=strtobool(ReadString('Estado','Aula '+ NumOrdLet(i),'-1'));
|
|||
mhost:=ReadString('Nombre','Aula '+ NumOrdLet(i),'');
|
|||
mip:=ReadString('IP','Aula '+ NumOrdLet(i),'');
|
|||
mmac:=ReadString('MAC','Aula '+ NumOrdLet(i),'');
|
|||
curso:=ReadString('Curso','Aula '+ NumOrdLet(i),'');
|
|||
dominio:=ReadString('Dominio','Aula '+ NumOrdLet(i),'general');
|
|||
equipoServidorAula[i]:=TEquipo.create(i,mhost,mip,mmac,mestado,curso,dominio);
|
|||
Application.ProcessMessages;
|
|||
end
|
|||
end;
|
|||
equipoAdministrador.host:= ReadString('Administrador','IP','192.168.0.254');
|
|||
Free;
|
|||
end;
|
|||
end;
|
|||
except
|
|||
begin
|
|||
Mensaje(MEN_ERROR_AULA,aceptar);
|
|||
application.Terminate
|
|||
end
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.EntrarPrograma();
|
|||
begin
|
|||
//TfrmContraServidores.Create(nil).showmodal;
|
|||
CargarOrdenesRoot();
|
|||
MostrarMenus();
|
|||
mnuEncenderclick(mnuEncender);
|
|||
iniciaRevisionCentro();
|
|||
application.ProcessMessages;
|
|||
pnPresenta.Visible:=false;
|
|||
cursor:=crDefault;
|
|||
application.ProcessMessages;
|
|||
lblRevInicio.visible:=true;
|
|||
enabled:=false;
|
|||
cursor:=crHourGlass;
|
|||
Image1.Cursor:=crHourGlass;
|
|||
pnEnc.Cursor:=crHourGlass;
|
|||
lstComandos.Visible:=false;
|
|||
lstProcesos.Visible:=true;
|
|||
end;
|
|||
procedure TfrmMain.lstComandosClick(Sender: TObject);
|
|||
begin
|
|||
if lstComandos.ItemIndex <>-1 then
|
|||
begin
|
|||
edComando.Text:=lstComandos.Items.Strings[lstComandos.itemindex];
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.lstProcesosClick(Sender: TObject);
|
|||
begin
|
|||
//anteriorcomando:=edComando.Text;
|
|||
if lstProcesos.ItemIndex <>-1 then
|
|||
begin
|
|||
edComando.Text:=lstProcesos.Items.Strings[lstProcesos.itemindex];
|
|||
//if anteriorcomando<>edComando.Text then EquipoAulaComandoNo(-1)
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.mnuAulaClick(Sender: TObject);
|
|||
begin
|
|||
if Length(Trim(g_contraServidores)) <1 then
|
|||
begin
|
|||
mensaje(MEN_CONTRA_SERVIDORES_AULA, aceptar);
|
|||
exit;
|
|||
end;
|
|||
TfrmEquiposAulas.Create(nil).showmodal;
|
|||
end;
|
|||
procedure TfrmMain.mnuConfigurarGruposClick(Sender: TObject);
|
|||
begin
|
|||
TfrmGruposServidores.Create(nil).showmodal;
|
|||
end;
|
|||
procedure TfrmMain.mnuConfigurarImpresoraClick(Sender: TObject);
|
|||
var
|
|||
orden,ip:String;
|
|||
begin
|
|||
if equipoServidorAula[f_equipoAulaBotonDerecho].EstadoActivadEquipo in [eUsuario,eEncendido,eEncendiendo,eApagando] then
|
|||
begin
|
|||
ip:=equipoServidorAula[f_equipoAulaBotonDerecho].IP;
|
|||
orden:='firefox http://%s:631 &';
|
|||
orden:=Format(orden,[ip]);
|
|||
Ejecutar(orden);
|
|||
end
|
|||
else
|
|||
begin
|
|||
mensaje('Este servidor está apagado. No se puede configurar su impresora',aceptar)
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.mnuContraClick(Sender: TObject);
|
|||
begin
|
|||
TfrmContraServidores.Create(nil).showmodal;
|
|||
end;
|
|||
procedure TfrmMain.mnuAcercadeClick(Sender: TObject);
|
|||
begin
|
|||
Application.CreateForm(TfrmAcerca, frmAcerca);
|
|||
frmAcerca.ShowModal;
|
|||
end;
|
|||
procedure TfrmMain.mnuArchivoRootClick(Sender: TObject);
|
|||
begin
|
|||
if Length(Trim(g_contraServidores)) <1 then
|
|||
begin
|
|||
mensaje(MEN_CONTRA_SERVIDORES_AULA, aceptar);
|
|||
exit;
|
|||
end;
|
|||
if rbCopias.Checked then
|
|||
begin
|
|||
f_tipo_envio:=0;
|
|||
cboIntervaloP7.Text:='2';
|
|||
btnAndar.caption:='Archivo todos';
|
|||
end
|
|||
else if rbDebian.Checked then
|
|||
begin
|
|||
f_tipo_envio:=1;
|
|||
cboIntervaloP7.Text:='3';
|
|||
btnAndar.caption:='Instalar todos';
|
|||
g_comando_consulta:=3;
|
|||
end
|
|||
else if rbCopiasCarpeta.Checked then
|
|||
begin
|
|||
f_tipo_envio:=3;
|
|||
cboIntervaloP7.Text:='3';
|
|||
btnAndar.caption:='Carpeta todos';
|
|||
end; ;
|
|||
f_PantallaActiva:=7;
|
|||
fnArchivoRoot.FileName:='';
|
|||
edCarpetaDestino.text:='/tmp';
|
|||
deCarpetasRoot.DialogTitle:='';
|
|||
edCarpetaDestino.enabled:=g_DestinosLibres;
|
|||
rbDebian.Enabled:=g_ComandosLibres;
|
|||
menusclick(mnuArchivoRoot,f_PantallaActiva,pnArcRoot,spArcRoot);
|
|||
end;
|
|||
procedure TfrmMain.mnuComandoRootClick(Sender: TObject);
|
|||
var
|
|||
i:integer;
|
|||
begin
|
|||
if Length(Trim(g_contraServidores)) <1 then
|
|||
begin
|
|||
mensaje(MEN_CONTRA_SERVIDORES_AULA, aceptar);
|
|||
exit;
|
|||
end;
|
|||
f_PantallaActiva:=6;
|
|||
f_tipo_envio:= -1;
|
|||
lstComandos.Visible:=false;
|
|||
lstProcesos.Visible:=false;
|
|||
meScript.Visible:=false;
|
|||
if rbConsulta.Checked then
|
|||
begin
|
|||
g_comando_consulta:=0;
|
|||
btnAndar.caption:='Consulta a todos';
|
|||
cboIntervaloP6.Text:='0.5';
|
|||
f_tipo_envio:= -1;
|
|||
lstProcesos.Visible:=true;
|
|||
end
|
|||
else if rbComando.Checked then
|
|||
begin
|
|||
btnAndar.caption:='Comando a todos';
|
|||
g_comando_consulta:=1;
|
|||
f_tipo_envio:= -1;
|
|||
lstComandos.Visible:=true;
|
|||
end
|
|||
else if rbScript.Checked then
|
|||
begin
|
|||
f_tipo_envio:=2;
|
|||
cboIntervaloP6.Text:='1';
|
|||
btnAndar.caption:='Script todos';
|
|||
g_comando_consulta:=2;
|
|||
meScript.Visible:=true;
|
|||
end;
|
|||
edComando.enabled:=g_ComandosLibres;
|
|||
lstComandos.clear;
|
|||
lstProcesos.clear;
|
|||
for i:=0 to High(g_ordenes_root) do
|
|||
lstComandos.Items.Add(g_ordenes_root[i]);
|
|||
for i:=0 to High(g_procesos_root) do
|
|||
lstProcesos.Items.Add(g_procesos_root[i]);
|
|||
menusclick(mnuComandoRoot,f_PantallaActiva,pnComandos,spCom);
|
|||
end;
|
|||
procedure TfrmMain.mnuConsultaClick(Sender: TObject);
|
|||
begin
|
|||
if Length(Trim(g_contraServidores)) <1 then
|
|||
begin
|
|||
mensaje(MEN_CONTRA_SERVIDORES_AULA, aceptar);
|
|||
exit;
|
|||
end;
|
|||
Application.CreateForm(TfrmEvaluar, frmEvaluar);
|
|||
frmEvaluar.ShowModal;
|
|||
end;
|
|||
procedure TfrmMain.mnuCursosClick(Sender: TObject);
|
|||
var
|
|||
i:integer;
|
|||
begin
|
|||
g_verNombreCursos:=not g_verNombreCursos;
|
|||
if g_verNombreCursos then
|
|||
mnuCursos.Caption:='Nombre equipos'
|
|||
else
|
|||
mnuCursos.Caption:='Nombre cursos';
|
|||
for i:=0 to g_num_servidores_aula-1 do
|
|||
lblOrdenata[i].Caption:=NombreUsuarioOrdenador(i);
|
|||
end;
|
|||
procedure TfrmMain.mnuEncenderClick(Sender: TObject);
|
|||
begin
|
|||
f_PantallaActiva:=0;
|
|||
menusclick(mnuencender,f_PantallaActiva,pnenc,spenc);
|
|||
pnenc.visible:=true;
|
|||
pnenc.BringToFront;
|
|||
end;
|
|||
procedure TfrmMain.mnuEnvCarClick(Sender: TObject);
|
|||
begin
|
|||
if Length(Trim(g_contraServidores)) <1 then
|
|||
begin
|
|||
mensaje(MEN_CONTRA_SERVIDORES_AULA, aceptar);
|
|||
exit;
|
|||
end;
|
|||
f_PantallaActiva:=5;
|
|||
MenusClick(mnuenvcar,f_PantallaActiva,pncar,spcar);
|
|||
end;
|
|||
procedure TfrmMain.mnuEnviarArchivoClick(Sender: TObject);
|
|||
begin
|
|||
if Length(Trim(g_contraServidores)) <1 then
|
|||
begin
|
|||
mensaje(MEN_CONTRA_SERVIDORES_AULA, aceptar);
|
|||
exit;
|
|||
end;
|
|||
f_PantallaActiva:=4;
|
|||
menusclick(mnuEnviarArchivo,f_PantallaActiva,pnarc,sparc);
|
|||
end;
|
|||
procedure TfrmMain.mnuIniEvaClick(Sender: TObject);
|
|||
begin
|
|||
Application.CreateForm(TfrmEvaluar, frmEvaluar);
|
|||
frmEvaluar.ShowModal;
|
|||
end;
|
|||
procedure TfrmMain.mnuMapaClick(Sender: TObject);
|
|||
begin
|
|||
Application.CreateForm(TfrmMapa, frmMapa);
|
|||
frmMapa.ShowModal;
|
|||
end;
|
|||
procedure TfrmMain.mnuMensajeClick(Sender: TObject);
|
|||
begin
|
|||
if Length(Trim(g_contraServidores)) <1 then
|
|||
begin
|
|||
mensaje(MEN_CONTRA_SERVIDORES_AULA, aceptar);
|
|||
exit;
|
|||
end;
|
|||
f_PantallaActiva:=3;
|
|||
menusclick(mnumensaje,f_PantallaActiva,pnmen,spmen);
|
|||
end;
|
|||
procedure TfrmMain.mnuNotClick(Sender: TObject);
|
|||
const
|
|||
P_BLOC:string='gedit';
|
|||
begin
|
|||
ordenesaula(ORD_EJECUTAR_EN_ADMINISTRADOR,[P_BLOC]);
|
|||
end;
|
|||
procedure TfrmMain.mnuRepetirClick(Sender: TObject);
|
|||
begin
|
|||
if Mensaje('¿Deseas ejecutar este proceso en el equipo seleccionado?', SiNo)=2 then exit;
|
|||
RepetirProceso(g_botonProcesoMarcado);
|
|||
end;
|
|||
procedure TfrmMain.RepetirProceso(numEqui:integer);
|
|||
var
|
|||
i:integer;
|
|||
begin
|
|||
equipoAdministrador.RealizandoProcesos:=true;
|
|||
f_contador_procesos_ver:=TIEMPO_PROCESOS*5;
|
|||
f_contador_procesos:=TIEMPO_PROCESOS;
|
|||
if numEqui = -1 then
|
|||
begin
|
|||
for i:=0 to High(equipoServidorAula) do
|
|||
begin
|
|||
if equipoServidorAula[i].EstadoActivadEquipo in [eEncendido,eEncendiendo,eUsuario,eApagando] then
|
|||
begin
|
|||
if btnProceso[i].Enabled then
|
|||
begin
|
|||
if btnProceso[i].Font.Color=clRed then
|
|||
begin
|
|||
equipoServidorAula[i].ProcesoHace:=true;
|
|||
equipoServidorAula[i].ProcesoTerminado:=false;
|
|||
equipoServidorAula[i].ejecutarProcesoAsi();
|
|||
Application.ProcessMessages;
|
|||
end;
|
|||
end;
|
|||
end
|
|||
end
|
|||
end
|
|||
else
|
|||
begin
|
|||
if equipoServidorAula[i].EstadoActivadEquipo in [eEncendido,eEncendiendo,eUsuario,eApagando] then
|
|||
begin
|
|||
if btnProceso[i].Enabled then
|
|||
begin
|
|||
equipoServidorAula[numEqui].ProcesoHace:=true;
|
|||
equipoServidorAula[numEqui].ProcesoTerminado:=false;
|
|||
equipoServidorAula[numEqui].ejecutarProcesoAsi();
|
|||
Application.ProcessMessages;
|
|||
end;
|
|||
end
|
|||
end;
|
|||
tmrRecogidaProcesos.Enabled:=true;
|
|||
tmrRecogidaProcesos1.Enabled:=true;
|
|||
lblTiempoProceso.Caption:='';
|
|||
lblTiempoProceso.Visible:=true;
|
|||
lblTiempoProceso.BringToFront;
|
|||
Application.ProcessMessages;
|
|||
end;
|
|||
procedure TfrmMain.mnuRestaurarClick(Sender: TObject);
|
|||
begin
|
|||
try
|
|||
destruirComponentes();
|
|||
lblGrupo.visible:=false;
|
|||
CargarConfiguracionCentro('/etc/adtosadmin.conf');
|
|||
IniciarVariables();
|
|||
CrearColocarComponentes();
|
|||
mnuEncenderClick(mnuEncender);
|
|||
iniciaRevisionCentro();
|
|||
except
|
|||
//
|
|||
end
|
|||
end;
|
|||
procedure TfrmMain.mnuResultadosClick(Sender: TObject);
|
|||
var
|
|||
i:integer;
|
|||
begin
|
|||
if not g_proceso_realizado then
|
|||
begin
|
|||
Mensaje('Los servidores de aula aún no han ejecutado ningún proceso o devuelto ninguna respuesta',aceptar);
|
|||
exit;
|
|||
end;
|
|||
if tmrRecogidaProcesos.Enabled then
|
|||
if mensaje('Aún queda equipos por devolver resultados del proceso, ¿Deseas ver los resultado de los que yan lo han hecho?',sino) =2 then exit;
|
|||
for i:=0 to High(equipoServidorAula) do
|
|||
begin
|
|||
btnProceso[i].Enabled:=false;
|
|||
btnProceso[i].Font.Color:=clBlack;
|
|||
if ((equipoServidorAula[i].ProcesoHace) and (equipoServidorAula[i].ProcesoId = equipoAdministrador.IdProcesos)) then
|
|||
begin
|
|||
btnProceso[i].Enabled:=true;
|
|||
if equipoServidorAula[i].ProcesoTerminado then
|
|||
begin
|
|||
btnProceso[i].Font.Color:=clGreen;
|
|||
end
|
|||
else
|
|||
begin
|
|||
equipoServidorAula[i].ProcesoResultado:='Aún no se ha recibido respuesta de este equipo';
|
|||
btnProceso[i].Font.Color:=clred;
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
meProceso1.Clear;
|
|||
pnTodos.visible:=true;
|
|||
pnTodos.BringToFront;
|
|||
btnTodosClick(btnTodos);
|
|||
end;
|
|||
procedure TfrmMain.mnuSalir1Click(Sender: TObject);
|
|||
begin
|
|||
close;
|
|||
end;
|
|||
procedure TfrmMain.mnuTerminalClick(Sender: TObject);
|
|||
const
|
|||
P_CALCU:string='gnome-terminal';
|
|||
begin
|
|||
ordenesaula(ORD_EJECUTAR_EN_ADMINISTRADOR,[P_CALCU]);
|
|||
end;
|
|||
procedure TfrmMain.rbComandoChange(Sender: TObject);
|
|||
var
|
|||
marcado:integer;
|
|||
begin
|
|||
//marcado:=(Sender as TRadioButton).Tag;
|
|||
IF (rbConsulta.Checked) then
|
|||
marcado:=0
|
|||
Else IF (rbComando.Checked) then
|
|||
marcado:=1
|
|||
Else IF (rbScript.Checked) then
|
|||
marcado:=2;
|
|||
fnScript.FileName:='';
|
|||
edComando.text:='';
|
|||
edComando.visible:=false;
|
|||
fnScript.Visible:=false;
|
|||
lstComandos.Visible:=false;
|
|||
lstProcesos.Visible:=false;
|
|||
meScript.visible:=false;
|
|||
meScript.Text:='';
|
|||
case marcado of
|
|||
0:
|
|||
begin
|
|||
f_tipo_envio:=-1;
|
|||
g_comando_consulta:=0;
|
|||
lstProcesos.Visible:=true;
|
|||
edComando.Visible:=true;
|
|||
lblProScript.Caption:='Consulta';
|
|||
lblInfoProScrip.Caption:='Selecciona una consulta y pulsa sobre el icono deseado para ejecutarlo en el correspondiente servidor de aula o sobre el botón "Consuta todos" para ejecutarla en todos los servidores de aula';
|
|||
btnAndar.Caption:='Consulta todos';
|
|||
cboIntervaloP6.Text:='0.5';
|
|||
end;
|
|||
1:
|
|||
begin
|
|||
f_tipo_envio:=-1;
|
|||
g_comando_consulta:=1;
|
|||
lstComandos.Visible:=true;
|
|||
edComando.Visible:=true;
|
|||
lblProScript.Caption:='Comando';
|
|||
lblInfoProScrip.Caption:='Selecciona el comando que desear ejecutar y pulsa sobre el icono deseado para ejecutarlo en el correspondiente servidor de aula o sobre el botón "Comando todos" para ejecutarlos en todos los servidores de aula';
|
|||
btnAndar.Caption:='Comando todos';
|
|||
cboIntervaloP6.Text:='0.5';
|
|||
end;
|
|||
2:
|
|||
begin
|
|||
f_tipo_envio:=2;
|
|||
fnScript.Visible:=true;
|
|||
meScript.Visible:=true;
|
|||
lblProScript.Caption:='Script';
|
|||
lblInfoProScrip.Caption:='Selecciona el script que deseas enviar y ejecutar, debe tener extensión .sh, y pulsa sobre el icono deseado para ejecutarlo en el correspondiente servidor de aula o sobre el botón "Script todos" para hacerlo en todos los servidores de aula';
|
|||
btnAndar.Caption:='Script todos';
|
|||
cboIntervaloP6.Text:='1';
|
|||
g_comando_consulta:=2;
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.rbCopiasChange(Sender: TObject);
|
|||
begin
|
|||
f_tipo_envio:=(sender as TRadioButton).tag;
|
|||
edCarpetaDestino.Enabled:=g_DestinosLibres;
|
|||
edCarpetaDestino.text:='/tmp';
|
|||
fnArchivoRoot.FileName:='';
|
|||
deCarpetasRoot.Visible:=false;
|
|||
fnArchivoRoot.Visible:=true;
|
|||
case f_tipo_envio of
|
|||
0:
|
|||
begin
|
|||
lblEnviar.Caption:='Archivo';
|
|||
lblInfoEnviar.Caption:='Pulsa sobre el icono amarillo para abrir el explorador de archivos para seleccionar uno, indica la carpeta de destino y pulsa sobre un monitor o sobre el botón "Archivo todos".';
|
|||
btnAndar.Caption:='Archivo todos' ;
|
|||
cboIntervaloP7.Text:='2';
|
|||
end;
|
|||
1:
|
|||
begin
|
|||
edCarpetaDestino.Enabled:=false;
|
|||
lblEnviar.Caption:='Paquete debian';
|
|||
lblInfoEnviar.Caption:='Pulsa sobre el icono amarillo para abrir el explorador de archivos para seleccionar un paquete debian, indica la carpeta de destino y pulsa sobre un monitor o sobre el botón "Instalar todos".';
|
|||
btnAndar.Caption:='Instalar todos' ;
|
|||
cboIntervaloP7.Text:='3';
|
|||
end;
|
|||
3:
|
|||
begin
|
|||
lblEnviar.Caption:='Carpeta';
|
|||
lblInfoEnviar.Caption:='Pulsa sobre el icono amarillo para abrir el explorador de directorios para seleccionar uno, indica la carpeta de destino y pulsa sobre un monitor o sobre el botón "Carpeta todos".';
|
|||
btnAndar.Caption:='Carpeta todos' ;
|
|||
deCarpetasRoot.Visible:=true;
|
|||
fnArchivoRoot.Visible:=false;
|
|||
cboIntervaloP7.Text:='3';
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.resultadoProcesoCommand(ASender: TIdCommand);
|
|||
var
|
|||
ip,codigo,host,respuesta:string;
|
|||
numE, size:integer;
|
|||
begin
|
|||
try
|
|||
//writeln('Asender.Params[0] ',Asender.Params[0] ,' ip ',Asender.Params[1] ,'host ',Asender.Params[2] ,'numEquipo ',Asender.Params[3] );
|
|||
// writeln('Asender.Params.Count '+IntToStr(Asender.Params.Count));
|
|||
if (Asender.Params.Count=4) then
|
|||
begin
|
|||
codigo:=HTTPDecode(Asender.Params[0]);
|
|||
ip:=HTTPDecode(Asender.Params[1]);
|
|||
host:= HTTPDecode(Asender.Params[2]);
|
|||
numE:=StrToInt(HTTPDecode(Asender.Params[3]));
|
|||
Asender.sendReply;
|
|||
size:= asender.Context.Connection.IOHandler.ReadLongInt(true);
|
|||
//writeln('Size ' +inttostr(size));
|
|||
respuesta:= asender.Context.Connection.IOHandler.ReadString(size);
|
|||
//writeln(respuesta);
|
|||
respuesta:=HTTPDecode(respuesta);
|
|||
THallarResultadoProcesoSync.add(codigo,ip, host,respuesta,numE);
|
|||
//writeln(codigo,' ',ip,' ',host,' ','mi numero es ',numE);
|
|||
end;
|
|||
except
|
|||
//writeln('Error al recibir respuesta');
|
|||
end;
|
|||
end;
|
|||
procedure TfrmMain.spBloClick(Sender: TObject);
|
|||
var
|
|||
botonpulsado:integer;
|
|||
begin
|
|||
botonpulsado:=(sender as Tspeedbutton).Tag;
|
|||
Application.ProcessMessages;
|
|||
case botonpulsado of
|
|||
0:mnuEncenderClick(mnuEncender);
|
|||
3:mnuMensajeClick(mnuMensaje);
|
|||
4:mnuEnviarArchivoClick(mnuEnviarArchivo);
|
|||
5:mnuEnvCarClick(mnuEnvCar);
|
|||
6:mnuComandoRootClick(mnuComandoRoot);
|
|||
7:mnuArchivoRootClick(mnuArchivoRoot);
|
|||
10:mnuAulaClick(mnuAula);
|
|||
18:mnuConsultaClick(mnuConsulta);
|
|||
end;
|
|||
end;
|
|||
initialization
|
|||
{$I inicio.lrs}
|
|||
end.
|