Proyecto

General

Perfil

Descargar (4,95 KB) Estadísticas
| Rama: | Revisión:
unit globales ;

{$mode objfpc}{$H+}

interface
uses
unix,Classes, SysUtils,process,IniFiles, HTTPDefs;

const
PUERTO_ROOT:integer=36999;
PUERTO_USUARIO:integer=37000;
PUERTO_VNC:integer=5989;
var
g_directorio_personal:string;
g_directorio_recogidos:string;
fusuario:string;
g_directorio_enviar:string;
fcontadorPing:integer=0;
fTiempoPing:integer=20;
fapagando:boolean=false;
fmipuerto:integer;


g_maquina_profe:boolean=false;
g_finalizar:boolean=false;
g_dirmensaje:string;
g_soy_canon:Boolean=false;
g_export_display:string='';
g_home_verdadero:String;
g_ancho_pantalla:String;
g_alto_pantalla:String;
procedure MatarAplicacion(aplica:String);
procedure Ejecutar1(comando:string);
procedure Ejecutar(comando:string);
function CrearArchivoMensaje(TipoMensaje,AsuntoMensaje,ContenidoMensaje:string; ArchivoMensaje:String='0'):boolean;
function HallarDatos(Cmd:string):ansistring;
procedure exportar_display(usuario:string);
implementation
procedure exportar_display(usuario:string);
begin
if usuario='aulalinex-alumno' then
begin
g_soy_canon:=true;
g_export_display:='export DISPLAY=:0;'
end
else
begin
g_soy_canon:=false;
g_export_display:=''
end;
end;
procedure Ejecutar(comando:string);
var
P: TProcess;
mproceso:string;
begin
P := TProcess.Create(nil);
try
mproceso:='sh -c '+QuotedStr(comando + ' 2>&1');
P.CommandLine := mproceso;
P.Execute;
finally
P.Free;
end;
end;
procedure Ejecutar1 (comando:string);
begin;
unix.fpSystem(comando);
end;
function HallarDatos(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;

procedure MatarAplicacion(aplica:String);
const
ORDEN_MATAR:STRING='killall %s & 2>>/dev/null';

var
orden:string;
begin
orden:=format(ORDEN_MATAR,[aplica]);
Ejecutar(orden);
end;
function CrearArchivoMensaje(TipoMensaje,AsuntoMensaje,ContenidoMensaje:string; ArchivoMensaje:String='0'):boolean;
const
NOMBRE_ALUMNO:string='aulalinex-alumno';
var
Mifichero:TMemIniFile;
begin
result:=true;
if fileexists(g_dirmensaje) then DeleteFile(g_dirmensaje);
try
Mifichero := TMemIniFile.Create(g_dirmensaje);
with Mifichero do
begin
WriteString('MENSAJE','mensaje',HttpDecode(ContenidoMensaje));
WriteString('MENSAJE','tipo', TipoMensaje);
WriteString('MENSAJE','titulo',HttpDecode(AsuntoMensaje));
WriteString('MENSAJE','tiempo','30');
WriteString('MENSAJE','usuario',NOMBRE_ALUMNO);
WriteString('MENSAJE','archivo',ArchivoMensaje);
UpdateFile;
Free;
end;
sleep(2000);
Ejecutar('chmod 777 ' + g_dirmensaje);
except
begin
result:=false;
writeLn('Error al crear archivo');
end;
end;
end;




end.

(7-7/12)