|
{
|
|
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 procaual;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
globales,globales1,textomensajes,Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
|
|
StdCtrls, Buttons, Process,cldetectarequposalumnos,IdURI;
|
|
|
|
type
|
|
|
|
{ TfrmProcAulas }
|
|
|
|
TfrmProcAulas = class(TForm)
|
|
btnConsultaTodos: TButton;
|
|
btnNo: TButton;
|
|
btnFinalizar: TButton;
|
|
btnSalir: TButton;
|
|
btnGuardar: TButton;
|
|
btnSi: TButton;
|
|
edConsulta: TEdit;
|
|
Image2: TImage;
|
|
imgF: TImage;
|
|
imgFondo: TImage;
|
|
imlEncender: TImageList;
|
|
Label1: TLabel;
|
|
Label2: TLabel;
|
|
lblHost: TLabel;
|
|
lblIP: TLabel;
|
|
lblMAC: TLabel;
|
|
Label64: TLabel;
|
|
Label65: TLabel;
|
|
Label66: TLabel;
|
|
lblMensaje: TLabel;
|
|
lblTiempo: TLabel;
|
|
lstConsultas: TListBox;
|
|
meProceso: TMemo;
|
|
meProcesos: TMemo;
|
|
PnMensaje: TPanel;
|
|
pnTodos: TPanel;
|
|
SaveDialog1: TSaveDialog;
|
|
tmrMen: TTimer;
|
|
tmrRecogidaResultados: TTimer;
|
|
|
|
procedure btnConsultaTodosClick(Sender: TObject);
|
|
procedure btnGuardarClick(Sender: TObject);
|
|
procedure btnSalirClick(Sender: TObject);
|
|
procedure FormActivate(Sender: TObject);
|
|
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
|
procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure lstConsultasClick(Sender: TObject);
|
|
procedure tmrRecogidaResultadosTimer(Sender: TObject);
|
|
private
|
|
procedure ActivarControles;
|
|
|
|
procedure AsignarImagen(numero:integer;viendopro:boolean);
|
|
procedure cambiarImagenBoton(numequ:integer;viendopro:Boolean);
|
|
procedure CrearBotonesProceso();
|
|
procedure CrearEtiquetasOr();
|
|
procedure CrearOrdenadores();
|
|
procedure DesactivarControles;
|
|
function IniciarConsultaTodos(): Boolean;
|
|
procedure MostrarPortatiles();
|
|
procedure muestramisProcesos(procesos: String);
|
|
procedure OrdConclic(Sender: TObject);
|
|
{ private declarations }
|
|
public
|
|
{ public declarations }
|
|
procedure anadirResultadoConsulta(idConsulta, host, ip, respuesta: string);
|
|
end;
|
|
|
|
var
|
|
frmProcAulas: TfrmProcAulas;
|
|
BotonPulsado: Array [0..55] of Boolean;
|
|
OrdCon:array[0..55] of TImage;
|
|
lblOrd:array[0..55] of Tlabel;
|
|
btnProceso:array[0..55] of TSpeedButton;
|
|
|
|
|
|
implementation
|
|
uses inicio;
|
|
const
|
|
TIEMPO_CONSULTA:integer=300;
|
|
var
|
|
f_numord:integer;
|
|
f_contador_consulta:integer=300;
|
|
f_proceso_servidores_respondido:integer=0;
|
|
f_id_consulta:String;
|
|
f_consulta:String;
|
|
f_realizando_consulta:Boolean=false;
|
|
|
|
procedure TfrmProcAulas.cambiarImagenBoton(numequ:integer;viendopro:Boolean);
|
|
var
|
|
i :integer;
|
|
miproceso:boolean;
|
|
begin
|
|
|
|
miproceso:= not viendopro;
|
|
for i:=0 to g_num_servidores_aula -1 do
|
|
begin
|
|
BotonPulsado[i]:=false;
|
|
AsignarImagen(i,BotonPulsado[i])
|
|
end;
|
|
BotonPulsado[numequ]:=miproceso;
|
|
AsignarImagen(numequ,BotonPulsado[numequ])
|
|
end;
|
|
procedure TfrmProcAulas.CrearOrdenadores();
|
|
var
|
|
i:integer;
|
|
begin
|
|
for i:= low(ordcon) to high(ordcon) do
|
|
begin
|
|
ordcon[i]:=Timage.Create(self);
|
|
with ordcon[i] do
|
|
begin
|
|
tag:=i;
|
|
Visible:=false;
|
|
Stretch:=true;
|
|
if i<g_num_servidores_aula then
|
|
AsignarImagen(i,false);
|
|
onclick:=@ordconclic;
|
|
Cursor:=crhandpoint;
|
|
Parent:=self;
|
|
end;
|
|
BotonPulsado[i]:=false;
|
|
end;
|
|
end;
|
|
procedure TfrmProcAulas.AsignarImagen(numero:integer;viendopro:boolean);
|
|
var
|
|
imgNum:integer;
|
|
begin
|
|
imgNum:=0;
|
|
OrdCon[numero].enabled:=false;
|
|
ordCon[numero].Cursor:=crArrow;
|
|
if (equipoServidorAula[numero].EstadoActivadEquipo = eAveriado) then
|
|
imgNum:=0
|
|
else if (equipoServidorAula[numero].EstadoActivadEquipo in[ eApagado, eEncendiendo, eApagando]) then
|
|
imgNum:=1
|
|
else
|
|
begin
|
|
if viendopro then imgNum:=3 else imgNum:=2;
|
|
OrdCon[numero].enabled:=true;
|
|
ordCon[numero].Cursor:=crHandPoint;
|
|
end;
|
|
imlEncender.getBitmap(imgNum,ordCon[numero].picture.Bitmap);
|
|
end;
|
|
|
|
procedure TfrmProcAulas.CrearEtiquetasOr();
|
|
var
|
|
i:integer;
|
|
begin
|
|
for i:= low(lblOrd) to high(lblOrd) do
|
|
begin
|
|
lblOrd[i]:=Tlabel.Create(self);
|
|
with lblOrd[i] do
|
|
begin
|
|
tag:=i;
|
|
Color:=clwhite;
|
|
transparent:=true;
|
|
autosize:=false;
|
|
alignment:=tacenter;
|
|
font.Name:='Sans';
|
|
font.Size:=10;
|
|
layout:=tlcenter;
|
|
Visible:=false;
|
|
if i< g_num_servidores_aula then
|
|
begin
|
|
Enabled:=equipoServidorAula[i].EstadoActivadEquipo <>eAveriado;
|
|
caption:=equipoServidorAula[i].mihost;
|
|
end;
|
|
Cursor:=crarrow;
|
|
Parent:=self;
|
|
end;
|
|
end
|
|
end;
|
|
procedure TfrmProcAulas.CrearBotonesProceso();
|
|
var
|
|
i:integer;
|
|
begin
|
|
for i:= low(btnProceso) to high(btnProceso) 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:=20+ 28*(i div 12);
|
|
left:=10 + 73 * (i mod 12);
|
|
if i< g_num_servidores_aula then
|
|
begin
|
|
Enabled:=false;
|
|
caption:=equipoServidorAula[i].mihost;
|
|
Visible:=true
|
|
end;
|
|
Cursor:=crarrow;
|
|
Parent:=pnTodos;
|
|
end;
|
|
end
|
|
end;
|
|
|
|
procedure TfrmProcAulas.btnSalirClick(Sender: TObject);
|
|
begin
|
|
close;
|
|
end;
|
|
|
|
procedure TfrmProcAulas.btnGuardarClick(Sender: TObject);
|
|
begin
|
|
if savedialog1.Execute then
|
|
meProcesos.Lines.SaveToFile(savedialog1.filename)
|
|
end;
|
|
|
|
procedure TfrmProcAulas.btnConsultaTodosClick(Sender: TObject);
|
|
var
|
|
i:integer;
|
|
begin
|
|
if IniciarConsultaTodos() then
|
|
begin
|
|
for i:=0 to g_num_servidores_aula-1 do
|
|
begin
|
|
equipoServidorAula[i].ProcesoHace:=false;
|
|
equipoServidorAula[i].ProcesoResultado:='Equipo apagado';
|
|
if equipoServidorAula[i].EstadoActivadEquipo in [eEncendido, eUsuario,eApagado] then
|
|
begin
|
|
equipoServidorAula[i].ProcesoHace:=true;
|
|
equipoServidorAula[i].ProcesoResultado:='La consulta no se ha completado con éxito';
|
|
end;
|
|
end;
|
|
Application.ProcessMessages;
|
|
for i:=0 to g_num_servidores_aula-1 do
|
|
begin
|
|
//equipoServidorAula[i].ejecutarProcesoAsi();
|
|
Sleep(SLEEP_MEDIO);
|
|
Application.ProcessMessages;
|
|
end;
|
|
tmrRecogidaResultados.Enabled:=true;
|
|
pnTodos.visible:=true;
|
|
end;
|
|
end;
|
|
|
|
Function TfrmProcAulas.IniciarConsultaTodos():Boolean;
|
|
var
|
|
i: integer;
|
|
begin
|
|
result:=true;
|
|
if Length(edConsulta.text)<0 then
|
|
begin
|
|
Mensaje('Seleccion o escriba una consulta válida',Aceptar);
|
|
Result:=false;
|
|
exit;
|
|
end;
|
|
try
|
|
//if IdCmdTCPServer1.Active=false then
|
|
//IniciarTCPCMD();
|
|
except
|
|
result:=false;
|
|
ActivarControles();
|
|
Mensaje(MEN_ERROR_INICIAR_SERVIDOR,Aceptar);
|
|
exit;
|
|
end;
|
|
equipoAdministrador.Procesos:=TIdURI.ParamsEncode(Trim(edConsulta.text));
|
|
Randomize;
|
|
equipoAdministrador.IdProcesos:=TIdURI.ParamsEncode(IntToStr(Random(10000000)));
|
|
//Mensaje(IntToStr(f_id_consulta),Aceptar);
|
|
btnConsultaTodos.Visible:=false;
|
|
f_proceso_servidores_respondido:=0;
|
|
f_contador_consulta:=TIEMPO_CONSULTA;
|
|
f_realizando_consulta:=true;
|
|
DesactivarControles();
|
|
btnSalir.enabled:=true;
|
|
PnMensaje.Visible:=true;
|
|
end;
|
|
procedure TfrmProcAulas.DesactivarControles;
|
|
var i:integer;
|
|
begin
|
|
for i:=0 to pnTodos.controlcount-1 do
|
|
if ((pnTodos.Controls[i] is Tbutton) or (pnTodos.controls[i] is TEdit) or (pnTodos.Controls[i] is TComboBox)) then
|
|
pnTodos.Controls[i].enabled:=false;
|
|
end;
|
|
procedure TfrmProcAulas.ActivarControles;
|
|
var i:integer;
|
|
begin
|
|
for i:=0 to pnTodos.controlcount-1 do
|
|
pnTodos.Controls[i].enabled:=true;
|
|
end;
|
|
procedure TfrmProcAulas.FormActivate(Sender: TObject);
|
|
begin
|
|
if frmMain.Visible then frmMain.hide;
|
|
end;
|
|
|
|
procedure TfrmProcAulas.FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
|
begin
|
|
CloseAction:=cafree;
|
|
end;
|
|
|
|
procedure TfrmProcAulas.FormCloseQuery(Sender: TObject; var CanClose: boolean);
|
|
begin
|
|
if mensaje('¿Deseas salir de esta zona?',sino)=2 then
|
|
canclose:=false
|
|
else
|
|
begin
|
|
frmMain.show;
|
|
hide;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmProcAulas.FormCreate(Sender: TObject);
|
|
var i: integer;
|
|
begin
|
|
top:=13;left:=(screen.Width-width)div 2;
|
|
CrearOrdenadores;
|
|
CrearEtiquetasOr;
|
|
CrearBotonesProceso();
|
|
MostrarPortatiles();
|
|
meProceso.Lines.Clear;
|
|
lblHost.Caption:='Host';
|
|
lblIP.Caption:='IP';
|
|
lblMAC.Caption:='MAC';
|
|
lstConsultas.clear;
|
|
for i:=0 to High(g_procesos_root) do
|
|
lstConsultas.Items.Add(g_procesos_root[i]);
|
|
edConsulta.enabled:=g_ComandosLibres;
|
|
end;
|
|
|
|
procedure TfrmProcAulas.lstConsultasClick(Sender: TObject);
|
|
begin
|
|
if lstConsultas.ItemIndex <>-1 then
|
|
edConsulta.Text:=lstConsultas.Items.Strings[lstConsultas.itemindex];
|
|
end;
|
|
|
|
procedure TfrmProcAulas.tmrRecogidaResultadosTimer(Sender: TObject);
|
|
var
|
|
i:integer;
|
|
todasrrecogidas:Boolean;
|
|
begin
|
|
todasrrecogidas:=true;
|
|
f_contador_consulta:=f_contador_consulta-1;
|
|
lblTiempo.Caption:=tiempo(f_contador_consulta);
|
|
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_consulta<=0) or todasrrecogidas then
|
|
begin
|
|
//tmrMensaje.enabled:=false;
|
|
tmrRecogidaResultados.enabled:=false;
|
|
//lblMenTiempo.Caption:=MEN_ORG_RESULTADOS;
|
|
for i:=0 to high(equipoServidorAula) do
|
|
begin
|
|
if equipoServidorAula[i].ProcesoHace then
|
|
if equipoServidorAula[i].ProcesoTerminado=false then
|
|
anadirResultadoConsulta(f_id_consulta,equipoServidorAula[i].mihost, equipoServidorAula[i].ip,'El equipo no ha respondido en el tiempo indicado para ello');
|
|
end;
|
|
//ShowMessage('Tiempo finalizaod');
|
|
Application.ProcessMessages;
|
|
//MostrarEstadisticasCuestion();
|
|
application.ProcessMessages;
|
|
todasrrecogidas:=false;
|
|
f_contador_consulta:=TIEMPO_CONSULTA;
|
|
PnMensaje.Visible:=false;
|
|
ActivarControles();
|
|
|
|
end;
|
|
end;
|
|
procedure TfrmProcAulas.anadirResultadoConsulta(idConsulta,host,ip, respuesta:string);
|
|
var
|
|
i:integer;
|
|
begin
|
|
// //writeln('mi ip: '+ ip + ' mi respuesta ' +inttostr(respuesta) + ' mitiempo: ' + inttostr(tiempor));
|
|
for i:=0 to high(equipoServidorAula) do
|
|
begin
|
|
if (equipoServidorAula[i].IP=ip) and (equipoServidorAula[i].mihost=host) then
|
|
begin
|
|
if idConsulta = f_id_consulta then
|
|
if equipoServidorAula[i].ProcesoHace then
|
|
if not equipoServidorAula[i].ProcesoHace then
|
|
equipoServidorAula[i].ProcesoResultado:=respuesta;
|
|
break;
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
|
|
procedure TfrmProcAulas.MostrarPortatiles();
|
|
var
|
|
tor,wo,ho,lb,tb :integer;
|
|
spt,i,numsep,numfilas:integer;
|
|
numfbotproceso: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;
|
|
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];
|
|
ordcon[i].SetBounds(lb,tb,wo,ho);
|
|
ordcon[i].visible:=true;
|
|
with lblOrd[i]do
|
|
begin
|
|
SetBounds(ordcon[i].Left-23,ordcon[i].top+ordcon[i].height+1,ordcon[i].Width+47,15);
|
|
visible:=true;
|
|
end
|
|
end;
|
|
|
|
for i:=g_num_servidores_aula to g_num_ord_pantalla-1 do
|
|
begin
|
|
ordcon[i].visible:=false;
|
|
lblOrd[i].visible:=false;
|
|
end;
|
|
numfbotproceso:=g_num_servidores_aula div 12;
|
|
lblHost.Top:=btnProceso[g_num_servidores_aula -1].top + 28;
|
|
lblMAC.Top:= lblHost.Top;
|
|
lblIP.Top:= lblHost.Top;
|
|
meProceso.Top:=lblHost.Top+ lblHost.Height;
|
|
meProceso.Height:=pnTodos.Height-meProceso.Top-btnConsultaTodos.top -15;
|
|
|
|
end;
|
|
|
|
|
|
procedure TfrmProcAulas.OrdConclic(Sender: TObject);
|
|
var
|
|
orden:string;
|
|
estado:Boolean;
|
|
|
|
begin
|
|
|
|
f_numord:=(sender as Timage).Tag;
|
|
if (not (equipoServidorAula[f_numord].EstadoActivadEquipo in [eUsuario,eEncendido])) then
|
|
begin
|
|
mensaje(MEN_NO_USUARIO,aceptar);
|
|
exit;
|
|
end;
|
|
if Length(Trim(edConsulta.text))<2 then
|
|
begin
|
|
mensaje('Introduzca una consulta correcta',aceptar);
|
|
exit;
|
|
end;
|
|
try
|
|
estado:= BotonPulsado[f_numord];
|
|
cambiarImagenBoton(f_numord, BotonPulsado[f_numord]);
|
|
if estado then exit;
|
|
enabled:=false;
|
|
orden:=edConsulta.text;
|
|
orden:=TIdURI.ParamsEncode(edConsulta.text);
|
|
orden:= 'hallarProcesosActivos ' + orden + ' '+ g_contraServidores;
|
|
with ThrDetectarEquiposAlumnos.Create(equipoServidorAula[f_numord].IP,orden) do
|
|
begin
|
|
OnDetectarEquipos:=@muestramisProcesos;
|
|
resume;
|
|
end;
|
|
// muestramisProcesos(orden);
|
|
meProcesos.Clear;
|
|
meProcesos.lines.add('Realizando la consulta. Espere, por favor');
|
|
except
|
|
enabled:=true;
|
|
end
|
|
end;
|
|
procedure TfrmProcAulas.muestramisProcesos(procesos:String);
|
|
var
|
|
datosusuario:string;
|
|
begin
|
|
meProcesos.Clear;
|
|
datosusuario:='Equipo: ' + equipoServidorAula[f_numord].mihost +'. IP: ' + equipoServidorAula[f_numord].IP +'. Usuario: ' + equipoServidorAula[f_numord].UsuarioActivo;
|
|
meProcesos.Lines.Add(datosusuario);
|
|
datosusuario:='Fecha: '+datetostr(date)+ ', Hora: '+timetostr(time);
|
|
meProcesos.Lines.Add('Consulta: '+ edConsulta.text);
|
|
meProcesos.Lines.Add(datosusuario);
|
|
meProcesos.Lines.add('========================================');
|
|
meProcesos.Lines.add('');
|
|
meProcesos.Lines.add(procesos);
|
|
enabled:=true;
|
|
end;
|
|
|
|
|
|
|
|
initialization
|
|
{$I procaual.lrs}
|
|
|
|
end.
|
|
|