|
unit demonio ;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
clservidor,globales,Classes , SysUtils , FileUtil , LResources , IdCmdTCPServer, IdCommandHandlers,IdContext, IdURI;
|
|
|
|
type
|
|
|
|
{ TDataModule1 }
|
|
|
|
TDataModule1 = class (TDataModule )
|
|
IdCmdTCPOrdenes:TIdCmdTCPServer;
|
|
procedure apagarSalvaCommand (ASender : TIdCommand );
|
|
procedure aplicacionCommand (ASender : TIdCommand );
|
|
procedure aplicacionNoCommand (ASender : TIdCommand );
|
|
procedure archivoCommand (ASender : TIdCommand );
|
|
procedure carpetaCommand (ASender : TIdCommand );
|
|
procedure cerrarAlumnoCommand(ASender: TIdCommand);
|
|
procedure desactivarTRCommand (ASender : TIdCommand );
|
|
procedure desactivarTRNoCommand (ASender : TIdCommand );
|
|
procedure devolverArchivosCommand (ASender : TIdCommand );
|
|
procedure hallarIPCommand (ASender : TIdCommand );
|
|
procedure hallarUsuarioCommand (ASender : TIdCommand );
|
|
procedure iniciarCuestionCommand (ASender : TIdCommand );
|
|
procedure iniciarExamenCommand (ASender : TIdCommand );
|
|
procedure limpiarCommand (ASender : TIdCommand );
|
|
procedure mensajeCommand (ASender : TIdCommand );
|
|
procedure mensajeNoCommand (ASender : TIdCommand );
|
|
procedure mostrarCommand (ASender : TIdCommand );
|
|
procedure mostrarNoCommand (ASender : TIdCommand );
|
|
procedure navegar1Command (ASender : TIdCommand );
|
|
procedure prepararRecogerCommand (ASender : TIdCommand );
|
|
procedure presentadorCommand (ASender : TIdCommand );
|
|
procedure ratonCommand (ASender : TIdCommand );
|
|
procedure ratonNoCommand (ASender : TIdCommand );
|
|
procedure recogerArchivosCommand (ASender : TIdCommand );
|
|
procedure verCommand (ASender : TIdCommand );
|
|
procedure verNoCommand (ASender : TIdCommand );
|
|
procedure videoCommand (ASender : TIdCommand );
|
|
procedure videoNoCommand (ASender : TIdCommand );
|
|
private
|
|
procedure CerrarServidor();
|
|
procedure iniciarClienteVNC();
|
|
procedure IniciarDemonio(iport: integer);
|
|
|
|
procedure IniciarDemonio1(mip: string; puerto: integer);
|
|
{ private declarations }
|
|
public
|
|
{ public declarations }
|
|
end ;
|
|
|
|
var
|
|
DataModule1 : TDataModule1 ;
|
|
miservidor:Tservidor;
|
|
CONST
|
|
ORD_NUMERO_INCORRECTA:string='Orden o número parámetros incorrectos';
|
|
|
|
|
|
implementation
|
|
|
|
{ TDataModule1 }
|
|
|
|
procedure TDataModule1.IniciarDemonio(iport:integer);
|
|
begin
|
|
|
|
try
|
|
IniciarDemonio1('localhost',iport);
|
|
except
|
|
try
|
|
miservidor.cierraPuerto();
|
|
sleep(10000);
|
|
IniciarDemonio1('localhost',iport);
|
|
except
|
|
writeln('Error al iniciar servidor');
|
|
halt;
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
end;
|
|
procedure TDataModule1.IniciarDemonio1(mip:string; puerto:integer);
|
|
var
|
|
aCommand:TIdCommandHandler;
|
|
begin
|
|
IdCmdTCPOrdenes:=TIdCmdTCPServer.Create(nil);
|
|
with IdCmdTCPOrdenes do
|
|
begin
|
|
Bindings.Clear;
|
|
Bindings.Add;
|
|
Bindings.items[0].IP:=mip;
|
|
Bindings.Items[0].Port:=puerto;
|
|
|
|
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'mensaje';
|
|
aCommand.OnCommand := @mensajeCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:='$';
|
|
aCommand.ParamDelimiter:='$';
|
|
aCommand.NormalReply.Code:='204';
|
|
aCommand.Enabled:=true;
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'mensajeNo';
|
|
aCommand.OnCommand := @mensajeNoCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='205';
|
|
aCommand.Enabled:=true;
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'aplicacion';
|
|
aCommand.OnCommand := @aplicacionCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='206';
|
|
aCommand.Enabled:=true;
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'video';
|
|
aCommand.OnCommand := @videoCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='208';
|
|
aCommand.Enabled:=true;
|
|
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'videoNo';
|
|
aCommand.OnCommand := @videoNoCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='209';
|
|
aCommand.Enabled:=true;
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'ver';
|
|
aCommand.OnCommand := @verCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='210';
|
|
aCommand.Enabled:=true;
|
|
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'verNo';
|
|
aCommand.OnCommand := @verNoCommand;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='211';
|
|
aCommand.Enabled:=true;
|
|
aCommand.Disconnect:=true;
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'mostrar';
|
|
aCommand.OnCommand := @mostrarCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='212';
|
|
aCommand.Enabled:=true;
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'mostrarNo';
|
|
aCommand.OnCommand := @mostrarNoCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='213';
|
|
aCommand.Enabled:=true;
|
|
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'raton';
|
|
aCommand.OnCommand := @ratonCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='214';
|
|
aCommand.Enabled:=true;
|
|
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'ratonNo';
|
|
aCommand.OnCommand := @ratonNoCommand;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='215';
|
|
aCommand.Enabled:=true;
|
|
aCommand.Disconnect:=true;
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'presentador';
|
|
aCommand.OnCommand := @presentadorCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='217';
|
|
aCommand.Enabled:=true;
|
|
|
|
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'desactivarTR';
|
|
aCommand.OnCommand := @desactivarTRCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='219';
|
|
aCommand.Enabled:=true;
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'desactivarTRNo';
|
|
aCommand.OnCommand := @desactivarTRNoCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='220';
|
|
aCommand.Enabled:=true;
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'limpiar';
|
|
aCommand.OnCommand := @limpiarCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='225';
|
|
aCommand.Enabled:=true;
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'apagarSalva';
|
|
aCommand.OnCommand := @apagarSalvaCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='226';
|
|
aCommand.Enabled:=true;
|
|
|
|
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'iniciarCuestion';
|
|
aCommand.OnCommand := @iniciarCuestionCommand;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='250';
|
|
aCommand.Enabled:=true;
|
|
aCommand.Disconnect:=true;
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'iniciarExamen';
|
|
aCommand.OnCommand := @iniciarExamenCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='251';
|
|
aCommand.Enabled:=true;
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'carpeta';
|
|
aCommand.OnCommand := @carpetaCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='253';
|
|
aCommand.Enabled:=true;
|
|
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'archivo';
|
|
aCommand.OnCommand := @archivoCommand;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='252';
|
|
aCommand.Enabled:=true;
|
|
aCommand.Disconnect:=true;
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'recogerArchivos';
|
|
aCommand.OnCommand := @recogerArchivosCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='254';
|
|
aCommand.Enabled:=true;
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'devolverArchivos';
|
|
aCommand.OnCommand := @devolverArchivosCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='255';
|
|
aCommand.Enabled:=true;
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'hallarUsuario';
|
|
aCommand.OnCommand := @hallarUsuarioCommand;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='256';
|
|
aCommand.Enabled:=true;
|
|
aCommand.Disconnect:=true;
|
|
|
|
aCommand:=CommandHandlers.Add;
|
|
aCommand.Command := 'cerrarAlumno';
|
|
aCommand.OnCommand := @cerrarAlumnoCommand;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='257';
|
|
aCommand.Enabled:=true;
|
|
|
|
aCommand.Command := 'navegar';
|
|
aCommand.OnCommand := @navegar1Command;
|
|
aCommand.Disconnect:=true;
|
|
aCommand.CmdDelimiter:=#32;
|
|
aCommand.ParamDelimiter:=#32;
|
|
aCommand.NormalReply.Code:='202';
|
|
aCommand.Enabled:=true;
|
|
|
|
//OnConnect:=@IdCmdTCPOrdenesConnect;
|
|
DefaultPort:=puerto;
|
|
MaxConnections:=0;
|
|
ListenQueue:=15;
|
|
TerminateWaitTime:=5000;
|
|
active:=true;
|
|
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.CerrarServidor();
|
|
var
|
|
lista:Tlist;
|
|
i:integer;
|
|
begin
|
|
lista:=IdCmdTCPOrdenes.Contexts.LockList;
|
|
try
|
|
for i:=(lista.Count -1) downto 0 do
|
|
TIdContext(lista.items[i]).Connection.Disconnect();
|
|
finally
|
|
IdCmdTCPOrdenes.Contexts.UnlockList;
|
|
end;
|
|
sleep(IdCmdTCPOrdenes.TerminateWaitTime);
|
|
Ejecutar1('killall x11vnc >/dev/null 2&>1');
|
|
Ejecutar1('killall serveralumnolinex-ltsp >/dev/null 2&>1');
|
|
sleep(500);
|
|
IdCmdTCPOrdenes.active:=false;
|
|
IdCmdTCPOrdenes.Bindings.Clear;
|
|
end;
|
|
|
|
procedure TDataModule1.hallarIPCommand (ASender : TIdCommand );
|
|
begin
|
|
Asender.Reply.SetReply(301,miservidor.IP);
|
|
ASender.SendReply;
|
|
end;
|
|
|
|
procedure TDataModule1.apagarSalvaCommand (ASender : TIdCommand );
|
|
const
|
|
ORD_APAGAR_SALVA:string='gnome-screensaver-command --exit &';
|
|
begin
|
|
if fapagando then exit;
|
|
Ejecutar1(ORD_APAGAR_SALVA);
|
|
end;
|
|
|
|
procedure TDataModule1.aplicacionCommand (ASender : TIdCommand );
|
|
var
|
|
orden:String;
|
|
begin
|
|
try
|
|
if ASender.Params.Count=1 then
|
|
begin
|
|
orden:=Asender.Params[0];
|
|
orden:= orden +' & 2 >> /dev/null';
|
|
ejecutar1(orden);
|
|
end
|
|
else
|
|
begin
|
|
writeln(ORD_NUMERO_INCORRECTA);
|
|
end;
|
|
except
|
|
writeln('orden o número de parámetros incorrectos');
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.aplicacionNoCommand (ASender : TIdCommand );
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TDataModule1.archivoCommand (ASender : TIdCommand );
|
|
var
|
|
orden,titulo,mensaje,archivo1:string;
|
|
stream:TFileStream;
|
|
begin
|
|
if fapagando then exit;
|
|
try
|
|
if (Asender.Params.Count=3) then
|
|
begin
|
|
archivo1:=fdirpersonal+'/recibidos_profesor/'+TIdURI.URLDecode(Asender.Params[0]);
|
|
mensaje:=Asender.Params[1];
|
|
titulo:=Asender.Params[2];
|
|
Asender.sendReply;
|
|
stream:=TfileStream.create(archivo1,fmcreate);
|
|
try
|
|
asender.Context.Connection.IOHandler.ReadStream(stream,-1,false);
|
|
if CrearArchivoMensaje('1',titulo,mensaje,'1') then
|
|
begin
|
|
orden:='/usr/bin/alumnolinex-ltsp &';
|
|
ejecutar1(orden);
|
|
end;
|
|
finally
|
|
freeandnil(stream)
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
writeln(ORD_NUMERO_INCORRECTA);
|
|
end;
|
|
except
|
|
writeln('Error al enviar archivo');
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.carpetaCommand (ASender : TIdCommand );
|
|
const
|
|
ORD_DESCOMPRIMIR:STRING= '(cd %s; tar xzvf aulalinex-carpeta.tar.gz;rm -f %s) &';
|
|
var
|
|
titulo:string;
|
|
mensaje:string;
|
|
orden,archivo:string;
|
|
stream:TFileStream;
|
|
begin
|
|
if fapagando then exit;
|
|
try
|
|
if (Asender.Params.Count=2) then
|
|
begin
|
|
archivo:=fdirpersonal+'/recibidos_profesor/aulalinex-carpeta.tar.gz';
|
|
mensaje:=Asender.Params[0];
|
|
titulo:=Asender.Params[1];
|
|
Asender.sendReply;
|
|
stream:=TfileStream.create(archivo,fmcreate);
|
|
try
|
|
asender.Context.Connection.IOHandler.ReadStream(stream,-1,false);
|
|
finally
|
|
freeandnil(stream);
|
|
sleep(2000);
|
|
orden:=Format(ORD_DESCOMPRIMIR,[fdirrecibidos,archivo]);
|
|
ejecutar1(orden);
|
|
if CrearArchivoMensaje('1',titulo,mensaje,'1') then
|
|
begin
|
|
orden:='/usr/bin/alumnolinex-ltsp &';
|
|
ejecutar1(orden);
|
|
end;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
writeln(ORD_NUMERO_INCORRECTA);
|
|
end;
|
|
except
|
|
writeln('Error al recibir carpeta');
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.cerrarAlumnoCommand(ASender: TIdCommand);
|
|
begin
|
|
CerrarServidor;
|
|
end;
|
|
|
|
procedure TDataModule1.desactivarTRCommand (ASender : TIdCommand );
|
|
begin
|
|
miservidor.InactivarTecladoRaton();;
|
|
end;
|
|
|
|
procedure TDataModule1.desactivarTRNoCommand (ASender : TIdCommand );
|
|
begin
|
|
miservidor.ActivarTecladoRaton();
|
|
end;
|
|
|
|
procedure TDataModule1.devolverArchivosCommand (ASender : TIdCommand );
|
|
const
|
|
ORD_DESCOMPRIMIR:STRING= '(cd %s; tar -xvzf aulalinex-devueltos.tar.gz) &';
|
|
var
|
|
titulo,mensaje,carpasig,asignatura:string;
|
|
orden,archivo:string;
|
|
stream:TFileStream;
|
|
begin
|
|
if fapagando then exit;
|
|
try
|
|
if (Asender.Params.Count=3) then
|
|
begin
|
|
asignatura:=Asender.Params[0];
|
|
mensaje:=Asender.Params[1];
|
|
titulo:=Asender.Params[2];
|
|
carpasig:=fdirrecibidos+'/'+asignatura;
|
|
if not DirectoryExists(carpasig) then
|
|
createdir(carpasig);
|
|
archivo:=carpasig+'/aulalinex-devueltos.tar.gz';
|
|
stream:=TfileStream.create(archivo,fmcreate);
|
|
try
|
|
Asender.sendReply;
|
|
asender.Context.Connection.IOHandler.ReadStream(stream,-1,false);
|
|
finally
|
|
freeandnil(stream);
|
|
orden:=Format(ORD_DESCOMPRIMIR,[carpasig]);
|
|
ejecutar1(orden);
|
|
if CrearArchivoMensaje('1',titulo,mensaje,'1') then
|
|
begin
|
|
orden:='/usr/bin/alumnolinex-ltsp &';
|
|
ejecutar1(orden);
|
|
end;
|
|
if FileExists(archivo) then
|
|
DeleteFile(archivo);
|
|
end
|
|
end
|
|
else
|
|
begin
|
|
writeln('ORD_NUMERO_INCORRECTA');
|
|
end;
|
|
except
|
|
writeln('No se han podido delvolver los archivos');
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TDataModule1.hallarUsuarioCommand (ASender : TIdCommand );
|
|
var
|
|
miusuario:string;
|
|
begin
|
|
try
|
|
miusuario:=miservidor.ObtenerNombreUsuario();
|
|
Asender.Reply.SetReply(306,miusuario);
|
|
ASender.SendReply;
|
|
writeln(miusuario);
|
|
except
|
|
writeln('Error al detectar el usuario ' + miusuario);
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.iniciarCuestionCommand (ASender : TIdCommand );
|
|
const
|
|
ORD_ALUMNO_CUESTION:string='aulalinexcuestion-ltsp &';
|
|
var
|
|
archivo1:string;
|
|
stream:TFileStream;
|
|
begin
|
|
if fapagando then exit;
|
|
try
|
|
archivo1:=fdirpersonal+'/recibidos_profesor/.cuestion.ini';
|
|
asender.sendReply;
|
|
stream:=TfileStream.create(archivo1,fmcreate);
|
|
try
|
|
asender.Context.Connection.IOHandler.ReadStream(stream,-1,false);
|
|
ejecutar1(ORD_ALUMNO_CUESTION);
|
|
finally
|
|
freeandnil(stream)
|
|
end;
|
|
except
|
|
writeln(ORD_NUMERO_INCORRECTA);
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TDataModule1.iniciarExamenCommand (ASender : TIdCommand );
|
|
const
|
|
ORD_ALUMNO_EXAMEN:string='aulalinexexamen-ltsp &';
|
|
var
|
|
archivo1:string;
|
|
stream:TFileStream;
|
|
begin
|
|
if fapagando then exit;
|
|
try
|
|
archivo1:=fdirpersonal+'/recibidos_profesor/.examen.ini';
|
|
asender.sendReply;
|
|
stream:=TfileStream.create(archivo1,fmcreate);
|
|
try
|
|
asender.Context.Connection.IOHandler.ReadStream(stream,-1,false);
|
|
ejecutar1(ORD_ALUMNO_EXAMEN);
|
|
finally
|
|
freeandnil(stream)
|
|
end;
|
|
except
|
|
writeln(ORD_NUMERO_INCORRECTA);
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.limpiarCommand (ASender : TIdCommand );
|
|
const
|
|
ORD_LIM_RECIBIDOS:string='rm -rf %s/recibidos_profesor/*';
|
|
ORD_LIM_ENVIADOS:string='rm -rf %s/enviar_profesor/*';
|
|
var
|
|
orden1,orden2:string;
|
|
tipo:integer;
|
|
begin
|
|
try
|
|
if Assigned (ASender.Params) then
|
|
begin
|
|
tipo:=strtoint(Asender.Params[0]);
|
|
orden1:=Format(ORD_LIM_RECIBIDOS,[fdirpersonal]);
|
|
orden2:=Format(ORD_LIM_ENVIADOS,[fdirpersonal]);
|
|
case tipo of
|
|
0: Ejecutar1(orden1);
|
|
1: Ejecutar1(orden2);
|
|
2:
|
|
begin
|
|
Ejecutar1(orden1);
|
|
Ejecutar1(orden2);
|
|
end;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
writeln(ORD_NUMERO_INCORRECTA);
|
|
end;
|
|
except
|
|
writeln('orden o número de parámetros incorrecto');
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.mensajeCommand (ASender : TIdCommand );
|
|
var
|
|
orden,tipo,asunto, mensaje:String;
|
|
begin
|
|
try
|
|
if ASender.Params.Count =3 then
|
|
begin
|
|
tipo:=Asender.Params[0];
|
|
asunto:= Asender.Params[1];
|
|
mensaje:=Asender.Params[2];
|
|
if CrearArchivoMensaje(tipo,asunto,mensaje,'0') then
|
|
begin
|
|
orden:='/usr/bin/alumnolinex-ltsp &';
|
|
ejecutar1(orden);
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
writeln(ORD_NUMERO_INCORRECTA)
|
|
end;
|
|
except
|
|
writeln('Error al enviar el mensaje')
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TDataModule1.mensajeNoCommand (ASender : TIdCommand );
|
|
begin
|
|
try
|
|
MatarAplicacion('alumnolinex-ltsp');
|
|
except
|
|
writeln('Error al cerrar mensaje');
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.mostrarCommand (ASender : TIdCommand );
|
|
const
|
|
ORDEN_CREAR_CONTRA:STRING='aulaconlinext %s %s/.seral456512';
|
|
ORDEN_MOSTRAR:string='xvnc4viewer -ViewOnly -UseLocalCursor=0 -LowColourLevel=1 -MenuKey F15 -Shared -Fullscreen -passwd %s localhost:5899 &';
|
|
var
|
|
archivocontra,orden,contra:string;
|
|
begin
|
|
try
|
|
if ASender.Params.count=1 then
|
|
begin
|
|
contra:=Asender.Params[0];
|
|
orden:=Format(ORDEN_CREAR_CONTRA,[contra,fdirpersonal]);
|
|
//writeln(orden);
|
|
ejecutar1(orden);
|
|
sleep(100);
|
|
archivocontra:=fdirpersonal+'/.seral456512';
|
|
orden:=Format(ORDEN_MOSTRAR,[archivocontra]);
|
|
ejecutar1(orden);
|
|
if miservidor.UsuarioCanon then
|
|
miservidor.InactivarTecladoRaton();
|
|
end
|
|
else
|
|
begin
|
|
writeln('numero de parametros incorrecto');
|
|
end;
|
|
except
|
|
writeln('Error al mostrar el profesor');
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.mostrarNoCommand (ASender : TIdCommand );
|
|
begin
|
|
try
|
|
if fapagando then exit;
|
|
MatarAplicacion('xvnc4viewer');
|
|
except
|
|
writeln('Error al detener mostrar alumno');
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.navegar1Command (ASender : TIdCommand );
|
|
const
|
|
//ICEWEASEL_LOCAL:string='xprop -root -f LTSP_COMMAND 8s -set LTSP_COMMAND "iceweasel %s" &';
|
|
ICEWEASEL_LOCAL1:string='google-chrome-stable %s &';
|
|
//FIREFOX_LOCAL2:string='export GTK_IM_MODULE_FILE=/etc/gtk-2.0/gdk.immodules.32;linux32 /opt/ltsp/i386/usr/lib/iceweasel/iceweasel2 "%s" &';*)
|
|
var
|
|
orden, pagina:string;
|
|
begin
|
|
try
|
|
if Assigned (ASender.Params) then
|
|
begin
|
|
// if FileExists('/usr/local/bin/firefox.local') then navegador:=FIREFOX_LOCAL else
|
|
//navegador:='/usr/bin/firefox';
|
|
pagina:=Asender.Params[0];
|
|
//orden:=navegador+' %s &';
|
|
orden:= Format(ICEWEASEL_LOCAL1,[pagina]);
|
|
writeln(orden);
|
|
ejecutar1(orden);
|
|
end
|
|
else
|
|
begin
|
|
writeln('orden no admitinda');
|
|
end;
|
|
except
|
|
writeln('Error al ejecutar la orden');
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.prepararRecogerCommand (ASender : TIdCommand );
|
|
// const
|
|
//ORDEN_COMPRIMIR:string='(cd %s; tar czvf recogidos_alumno.tar.gz %s) &';
|
|
// var
|
|
//orden:string;
|
|
begin
|
|
try
|
|
if fapagando then exit;
|
|
//orden:= Format(ORDEN_COMPRIMIR,[fenviar,'*']);
|
|
//ejecutar1(orden);
|
|
except
|
|
writeln('Error al preparar el envío ');
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.presentadorCommand (ASender : TIdCommand );
|
|
begin
|
|
try
|
|
if ASender.Params.count=2 then
|
|
begin
|
|
ejecutar1('killall xvnc4viewer');
|
|
iniciarClienteVNC();
|
|
end
|
|
else
|
|
begin
|
|
writeln(ORD_NUMERO_INCORRECTA);
|
|
end;
|
|
except
|
|
writeln('Error al iniciar presentación');
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.ratonCommand (ASender : TIdCommand );
|
|
const
|
|
ORDEN_CREAR_CONTRA:STRING='aulaconlinext %s %s/.seral456512';
|
|
ORDEN_MOSTRAR:string='xvnc4viewer -UseLocalCursor=0 -LowColourLevel=1 -MenuKey F15 -Shared -Fullscreen -passwd %s localhost:5899 &';
|
|
ORDEN_MATAR_VNC='killall xvnc4viewer >/dev/null 2&>1';
|
|
var
|
|
archivocontra, orden,contra:string;
|
|
begin
|
|
try
|
|
if ASender.Params.count=1 then
|
|
begin
|
|
ejecutar1(ORDEN_MATAR_VNC);
|
|
contra:=Asender.Params[0];
|
|
orden:=Format(ORDEN_CREAR_CONTRA,[contra,fdirpersonal]);
|
|
ejecutar1(orden);
|
|
sleep(100);
|
|
archivocontra:=fdirpersonal+'/.seral456512';
|
|
orden:=Format(ORDEN_MOSTRAR,[archivocontra]);
|
|
ejecutar1(orden);
|
|
end
|
|
else
|
|
begin
|
|
writeln(ORD_NUMERO_INCORRECTA);
|
|
end;
|
|
except
|
|
writeln('Error al ceder el ratón');
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.ratonNoCommand (ASender : TIdCommand );
|
|
const
|
|
ORDEN_CREAR_CONTRA:STRING='aulaconlinext %s %s/.seral456512';
|
|
ORDEN_MOSTRAR:string='xvnc4viewer -UseLocalCursor=0 -LowColourLevel=1 -ViewOnly -MenuKey F15 -Shared -Fullscreen -passwd %s localhost:5899 &';
|
|
ORDEN_MATAR_VNC='killall xvnc4viewer >/dev/null 2&>1';
|
|
var
|
|
archivocontra,orden,contra:string;
|
|
begin
|
|
try
|
|
if ASender.Params.count=1 then
|
|
begin
|
|
ejecutar1(ORDEN_MATAR_VNC);
|
|
contra:=Asender.Params[0];
|
|
orden:=Format(ORDEN_CREAR_CONTRA,[contra,fdirpersonal]);
|
|
ejecutar1(orden);
|
|
sleep(100);
|
|
archivocontra:=fdirpersonal+'/.seral456512';
|
|
orden:=Format(ORDEN_MOSTRAR,[archivocontra]);
|
|
ejecutar1(orden);
|
|
|
|
end
|
|
else
|
|
begin
|
|
writeln(ORD_NUMERO_INCORRECTA);
|
|
end;
|
|
except
|
|
writeln('orden o número de parámetros incorrecto');
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.recogerArchivosCommand (ASender : TIdCommand );
|
|
const
|
|
ORDEN_COMPRIMIR:string='(cd %s; tar czvf recogidos_alumno.tar.gz %s;touch %s;chmod 777 %s -R )';
|
|
var
|
|
orden,asunto, mensaje,archivo:string;
|
|
stream:TfileStream;
|
|
crcontador:integer=0;
|
|
comprimidos:Boolean=false;
|
|
arch_recogidos:String;
|
|
begin
|
|
if fapagando then exit;
|
|
try
|
|
arch_recogidos:=fdirpersonal+'/ficheros_recogidos.txt';
|
|
if fileExists(arch_recogidos) then Deletefile(arch_recogidos);
|
|
archivo:=fenviar+'/recogidos_alumno.tar.gz';
|
|
if fileExists(archivo) then Deletefile(archivo);
|
|
orden:= Format(ORDEN_COMPRIMIR,[fenviar,'*',arch_recogidos,fenviar]);
|
|
ejecutar1(orden);
|
|
while ((comprimidos=false) and (crcontador <500)) do
|
|
begin
|
|
comprimidos:=fileExists(arch_recogidos);
|
|
inc(crcontador);
|
|
Sleep(100);
|
|
end;
|
|
Sleep(1000);
|
|
if fileExists(archivo) then
|
|
begin
|
|
stream:=TfileStream.create(archivo, fmOpenRead+ fmShareDenyNone);
|
|
try
|
|
asunto:=Asender.Params[2];
|
|
mensaje:=Asender.Params[1];
|
|
ASender.SendReply;
|
|
asender.Context.Connection.IOHandler.WriteBufferOpen;
|
|
asender.Context.Connection.IOHandler.Write(stream,0,true);
|
|
asender.Context.Connection.IOHandler.WriteBufferClose;
|
|
if CrearArchivoMensaje('1',asunto,mensaje,'0') then
|
|
begin
|
|
orden:='/usr/bin/alumnolinex-ltsp &';
|
|
ejecutar1(orden);
|
|
end;
|
|
finally
|
|
begin
|
|
stream.free;
|
|
if fileExists(archivo) then
|
|
Deletefile(archivo);
|
|
end;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
writeln(ORD_NUMERO_INCORRECTA);
|
|
end;
|
|
except
|
|
writeln('orden o número de parámetros incorrecto');
|
|
end;
|
|
end;
|
|
|
|
Procedure TDataModule1.iniciarClienteVNC ( );
|
|
const
|
|
HALLARX11VNC:string='ps aux | grep %d | grep -v grep | grep -c x11vnc';
|
|
ORDEN_INICIAR_VNC:STRING='x11vnc -localhost -bg -shared -forever -ncache 10 -noshm -rfbport %d -passwd 02101067';
|
|
var
|
|
orden:string;
|
|
numvnc,vncactivo:string;
|
|
begin
|
|
vncactivo:=Format(HALLARX11VNC,[miservidor.PuertoVNC]);
|
|
numvnc:=miservidor.HallarDato(vncactivo);
|
|
if (numvnc= '0') then
|
|
begin
|
|
orden:=Format(ORDEN_INICIAR_VNC,[miservidor.PuertoVNC]);
|
|
ejecutar1(orden);
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.verCommand (ASender : TIdCommand );
|
|
begin
|
|
try
|
|
if ASender.Params.count=2 then
|
|
iniciarClienteVNC()
|
|
else
|
|
writeln(ORD_NUMERO_INCORRECTA);
|
|
except
|
|
writeln('Error al mostrar imagen');
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.verNoCommand (ASender : TIdCommand );
|
|
begin
|
|
try
|
|
if fapagando then exit;
|
|
Ejecutar1('killall x11vnc >/dev/null 2&>1');
|
|
except
|
|
writeln('Error al ocultar al alumno')
|
|
end
|
|
end;
|
|
|
|
procedure TDataModule1.videoCommand (ASender : TIdCommand );
|
|
const
|
|
//ORDEN_MIRAR_VIDEO:STRING='(route add -net %s/24 gw %s;vlc udp:@%s) &';
|
|
ORDEN_MIRAR_VIDEO1:STRING='xprop -root -f LTSP_COMMAND 8s -set LTSP_COMMAND "vlc -I dummy --quiet --video-on-top --skip-frames --sout-display-delay=1100 --sub-track=0 --no-overlay -f rtp://@%s:%s" &';
|
|
var
|
|
orden,ipvlc, puerto:string;
|
|
begin
|
|
try
|
|
if fapagando then exit;
|
|
if Assigned (ASender.Params) then
|
|
begin
|
|
ipvlc:=Asender.Params[0];
|
|
puerto:=Asender.Params[1];
|
|
orden:=Format(ORDEN_MIRAR_VIDEO1,[ipvlc,puerto]);
|
|
writeln(orden);
|
|
ejecutar1(orden);
|
|
|
|
end
|
|
else
|
|
begin
|
|
writeln(ORD_NUMERO_INCORRECTA);
|
|
end;
|
|
except
|
|
writeln('Error al iniciar al alumno');
|
|
end;
|
|
end;
|
|
|
|
procedure TDataModule1.videoNoCommand (ASender : TIdCommand );
|
|
begin
|
|
try
|
|
if fapagando then exit;
|
|
MatarAplicacion('vlc');
|
|
except
|
|
writeln('Error al detener el vídeo');
|
|
end;
|
|
end;
|
|
initialization
|
|
{$I demonio.lrs}
|
|
g_maquina_profe:=(trim(HallarDatos('echo $LTSP_CLIENT')) ='');
|
|
if g_maquina_profe then
|
|
begin
|
|
try
|
|
g_finalizar:=true;
|
|
exit;
|
|
except
|
|
writeln('Apagando serveralumnolinex');
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
DataModule1:=TDataModule1.create(nil);
|
|
miservidor:=Tservidor.create;
|
|
fusuario:=miservidor.UsuarioAlumno;
|
|
fmipuerto:=miservidor.Puerto;
|
|
DataModule1.IniciarDemonio(fmipuerto);
|
|
fdirpersonal:=miservidor.HomeUsuario;
|
|
fdirrecibidos:=miservidor.DirRecibidos;
|
|
fenviar:=miservidor.DirEnviar;
|
|
if not directoryexists(fdirrecibidos) then
|
|
createdir(fdirrecibidos);
|
|
Ejecutar1('chmod 755 ' +fdirrecibidos +' &');
|
|
if not directoryexists(fenviar) then
|
|
createdir(fenviar);
|
|
Ejecutar1('chmod 755 ' +fenviar +' &');
|
|
writeln('inciando el servidor');
|
|
g_dirmensaje:=fdirrecibidos+'/.mensaje.ini';
|
|
if miservidor.UsuarioCanon then
|
|
miservidor.InactivarTecladoRaton;
|
|
end;
|
|
|
|
Finalization
|
|
if not g_maquina_profe then
|
|
begin
|
|
FreeAndNil(DataModule1);
|
|
FreeAndNil(miservidor);
|
|
end;
|
|
|
|
end .
|
|
|