Proyecto

General

Perfil

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


(3-3/10)