|
unit globales ;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
process, Classes, StrUtils, SysUtils,clservidor,IniFiles ;
|
|
type
|
|
TEquipos_Alumnos=record
|
|
nombre:String;
|
|
ip:String;
|
|
mac:String;
|
|
dominio:String;
|
|
curso:String;
|
|
end;
|
|
|
|
var
|
|
miservidor:TServidor;
|
|
g_equipo_actualizado:Boolean=true;
|
|
g_contador:integer=950;
|
|
g_equipos_lista:integer=0;
|
|
g_ip_conexion:String='';
|
|
g_ips_servidores_aula:Array of TEquipos_Alumnos;
|
|
g_ips_equipos:array of string;
|
|
function HallarDato1(Cmd:string):String;
|
|
procedure Ejecutar1 (comando:string);
|
|
function NumOrdLet(num:integer):string;
|
|
procedure actualizaDatosEquipos(archivoini:string='/etc/adtosadmin.conf');
|
|
implementation
|
|
function NumOrdLet(num:integer):string;
|
|
var
|
|
letraord:string;
|
|
begin
|
|
num:=succ(num);
|
|
letraord:=ifthen(num<10,'0'+inttostr(num),inttostr(num));
|
|
result:=letraord;
|
|
end;
|
|
procedure actualizaDatosEquipos(archivoini:string='/etc/adtosadmin.conf');
|
|
var
|
|
FicheroIni:TMemIniFile;
|
|
i:integer;
|
|
begin
|
|
try
|
|
FicheroIni:=TMemIniFile.create(archivoini);
|
|
try
|
|
with FicheroIni do
|
|
begin
|
|
WriteInteger('Centro', 'Numero equipos registrados',g_equipos_lista);
|
|
for i:=0 to g_equipos_lista-1 do
|
|
begin
|
|
WriteString('Nombre','Aula '+ NumOrdLet(i),g_ips_servidores_aula[i].nombre);
|
|
WriteString('IP','Aula '+ NumOrdLet(i),g_ips_servidores_aula[i].ip);
|
|
WriteString('MAC','Aula '+ NumOrdLet(i),g_ips_servidores_aula[i].mac);
|
|
WriteString('Dominio','Aula '+ NumOrdLet(i),g_ips_servidores_aula[i].dominio);
|
|
WriteString('Curso','Aula '+ NumOrdLet(i),g_ips_servidores_aula[i].curso);
|
|
|
|
end;
|
|
UpdateFile;
|
|
end;
|
|
finally
|
|
FicheroIni.free;
|
|
end;
|
|
except
|
|
writeln('Error al cargar datos');
|
|
end;
|
|
end;
|
|
|
|
procedure Ejecutar1(comando: string);
|
|
var
|
|
P: TProcess;
|
|
mproceso: string;
|
|
begin
|
|
P := TProcess.Create(nil);
|
|
try
|
|
mproceso := 'sh -c ' + QuotedStr(comando);
|
|
P.CommandLine := mproceso;
|
|
P.Execute;
|
|
finally
|
|
P.Free;
|
|
end;
|
|
end;
|
|
function HallarDato1(Cmd: string): ansistring;
|
|
const
|
|
READ_BYTES = 2048;
|
|
var
|
|
S: TStringList;
|
|
M: TMemoryStream;
|
|
P: TProcess;
|
|
n: longint;
|
|
BytesRead: longint;
|
|
ssalida: ansistring;
|
|
mproceso: string;
|
|
begin
|
|
mproceso := 'sh -c ' + QuotedStr(Cmd + ' 2>>/dev/null');
|
|
S := TStringList.Create;
|
|
M := TMemoryStream.Create;
|
|
BytesRead := 0;
|
|
P := TProcess.Create(nil);
|
|
try
|
|
try
|
|
P.CommandLine := mproceso;
|
|
P.Options := [poUsePipes];
|
|
P.Execute;
|
|
while P.Running do
|
|
begin
|
|
M.SetSize(BytesRead + READ_BYTES);
|
|
n := P.Output.Read((M.Memory + BytesRead)^, READ_BYTES);
|
|
if n > 0 then
|
|
begin
|
|
Inc(BytesRead, n);
|
|
end
|
|
else
|
|
begin
|
|
Sleep(100);
|
|
end;
|
|
end;
|
|
repeat
|
|
M.SetSize(BytesRead + READ_BYTES);
|
|
n := P.Output.Read((M.Memory + BytesRead)^, READ_BYTES);
|
|
if n > 0 then
|
|
begin
|
|
Inc(BytesRead, n);
|
|
Write('.');
|
|
end;
|
|
until n <= 0;
|
|
M.SetSize(BytesRead);
|
|
S.LoadFromStream(M);
|
|
ssalida := trim(S.Text);
|
|
except
|
|
ssalida := 'Error al ejecutar proceso. Comando o parámetros no validos';
|
|
end;
|
|
finally
|
|
S.Free;
|
|
P.Free;
|
|
M.Free;
|
|
Result := ssalida;
|
|
end;
|
|
end;
|
|
end .
|
|
|