|
unit clservidor;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
process,Classes, SysUtils,IniFiles;
|
|
type
|
|
|
|
{ Tservidor }
|
|
|
|
Tservidor = class
|
|
private
|
|
procedure LeerSetupIni(archivo:string);
|
|
public
|
|
constructor create (archivoini:string='/etc/adtosadmin.conf');
|
|
procedure Ejecutar(comando: string);
|
|
function HallarDato(Cmd: string): string;
|
|
end;
|
|
|
|
implementation
|
|
uses globales;
|
|
const
|
|
NUMERO_EQUIPOS_POSIBLES:integer=1500;
|
|
procedure Tservidor.Ejecutar(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 Tservidor.HallarDato(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>&1');
|
|
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;
|
|
|
|
constructor Tservidor.create(archivoini:string='/etc/adtosadmin.conf');
|
|
begin
|
|
inherited create;
|
|
if FileExists(archivoini) then
|
|
LeerSetupIni(archivoini);
|
|
end;
|
|
|
|
procedure Tservidor.LeerSetupIni(archivo:string);
|
|
var
|
|
FicheroIni:TMemIniFile;
|
|
i:integer;
|
|
begin
|
|
try
|
|
FicheroIni:=TMemIniFile.create(archivo);
|
|
try
|
|
with FicheroIni do
|
|
begin
|
|
g_equipos_lista:=0;
|
|
setlength(g_ips_equipos,NUMERO_EQUIPOS_POSIBLES);
|
|
SetLength(g_ips_servidores_aula,NUMERO_EQUIPOS_POSIBLES);
|
|
for i:=0 to NUMERO_EQUIPOS_POSIBLES-1 do
|
|
begin
|
|
g_ips_equipos[i]:=ReadString('IP','Aula '+ NumOrdLet(i),'');
|
|
g_ips_servidores_aula[i].nombre:=ReadString('Nombre','Aula '+ NumOrdLet(i),'');
|
|
g_ips_servidores_aula[i].ip:=ReadString('IP','Aula '+ NumOrdLet(i),'');
|
|
g_ips_servidores_aula[i].mac:=ReadString('MAC','Aula '+ NumOrdLet(i),'');
|
|
g_ips_servidores_aula[i].dominio:=ReadString('Dominio','Aula '+ NumOrdLet(i),'');
|
|
g_ips_servidores_aula[i].curso:=ReadString('Curso','Aula '+ NumOrdLet(i),'');
|
|
if trim(g_ips_servidores_aula[i].nombre)<>'' then g_equipos_lista:=i+1;
|
|
end;
|
|
end;
|
|
finally
|
|
setlength(g_ips_equipos,g_equipos_lista);
|
|
SetLength(g_ips_servidores_aula,g_equipos_lista);
|
|
FicheroIni.free;
|
|
end;
|
|
except
|
|
writeln('Error al cargar datos');
|
|
end;
|
|
end;
|
|
|
|
end.
|
|
|
|
|