Proyecto

General

Perfil

Descargar (17,7 KB) Estadísticas
| Rama: | Revisión:
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 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.