desarrollosconsejeria/adtos-server/1.7-0/serveradtosserver/demonio.pas @ 29401061
23a384b9 | Elisa | unit demonio;
|
|
{$mode objfpc}{$H+}
|
|||
interface
|
|||
uses
|
|||
clservidor,globales,Classes, SysUtils, IdCmdTCPServer, IdCommandHandlers, IdContext;
|
|||
type
|
|||
{ TDataModule1 }
|
|||
TDataModule1 = class(TDataModule)
|
|||
IdCmdTCPServer1: TIdCmdTCPServer;
|
|||
procedure actualizarDatosEquipoCommand(ASender: TIdCommand);
|
|||
procedure DataModuleCreate(Sender: TObject);
|
|||
procedure IdCmdTCPServer1Connect(AContext: TIdContext);
|
|||
private
|
|||
procedure IniciarDemonio(iport: integer; ihost: string);
|
|||
procedure IniciarDemonio1(iport: integer; ihost: string);
|
|||
{ private declarations }
|
|||
public
|
|||
{ public declarations }
|
|||
end;
|
|||
var
|
|||
DataModule1: TDataModule1;
|
|||
implementation
|
|||
{$R *.lfm}
|
|||
procedure TDataModule1.actualizarDatosEquipoCommand(ASender: TIdCommand);
|
|||
var
|
|||
datos_equipo,ip_equipo, mac_equipo,nombre_equipo,dominio_equipo:string;
|
|||
sdatos:TstringList;
|
|||
equipos:Array of TEquipos_Alumnos;
|
|||
i:integer;
|
|||
equipoExiste:Boolean;
|
|||
posicionLibre:Boolean;
|
|||
begin
|
|||
try
|
|||
if Asender.Params.Count=1 then
|
|||
begin
|
|||
g_equipo_actualizado:=true;
|
|||
equipos:= g_ips_servidores_aula;
|
|||
datos_equipo:= trim(Asender.Params[0]);
|
|||
sdatos:=TStringList.create;
|
|||
sdatos.Delimiter:='&';
|
|||
sdatos.DelimitedText:=datos_equipo;
|
|||
nombre_equipo:=Trim(sdatos[0]);
|
|||
ip_equipo:=Trim(sdatos[1]);
|
|||
mac_equipo:=Trim(sdatos[2]);
|
|||
dominio_equipo:=Trim(sdatos[3]);
|
|||
sdatos.free;
|
|||
equipoExiste:=false;
|
|||
//writeln(datos_equipo);
|
|||
for i:=0 to g_equipos_lista -1 do
|
|||
begin
|
|||
if (equipos[i].nombre= nombre_equipo) then
|
|||
begin
|
|||
if ((equipos[i].dominio=dominio_equipo) or (equipos[i].dominio='')) then
|
|||
begin
|
|||
equipoExiste:=true;
|
|||
if (equipos[i].ip<>ip_equipo) or (equipos[i].dominio <> dominio_equipo) then
|
|||
begin
|
|||
equipos[i].ip:=ip_equipo;
|
|||
equipos[i].mac:=mac_equipo;
|
|||
equipos[i].dominio:=dominio_equipo;
|
|||
end;
|
|||
break;
|
|||
end;
|
|||
end;
|
|||
end;
|
|||
for i:=0 to g_equipos_lista -1 do
|
|||
begin
|
|||
if (equipos[i].ip= ip_equipo) then
|
|||
begin
|
|||
if (equipos[i].nombre<>nombre_equipo) then
|
|||
begin
|
|||
equipos[i].ip:='';
|
|||
end;
|
|||
end
|
|||
end;
|
|||
if equipoExiste=false then
|
|||
begin
|
|||
posicionLibre:=false;
|
|||
for i:=0 to g_equipos_lista -1 do
|
|||
begin
|
|||
if (Trim(equipos[i].nombre)='') then
|
|||
begin
|
|||
posicionLibre:=true;
|
|||
equipos[i].nombre:=nombre_equipo;
|
|||
equipos[i].ip:=ip_equipo;
|
|||
equipos[i].mac:=mac_equipo;
|
|||
equipos[i].dominio:=dominio_equipo;
|
|||
break;
|
|||
end
|
|||
end;
|
|||
if not posicionLibre then
|
|||
begin
|
|||
SetLength(equipos,g_equipos_lista+1);
|
|||
equipos[g_equipos_lista].nombre:=nombre_equipo;
|
|||
equipos[g_equipos_lista].ip:=ip_equipo;
|
|||
equipos[g_equipos_lista].mac:=mac_equipo;
|
|||
equipos[g_equipos_lista].dominio:=dominio_equipo;
|
|||
inc(g_equipos_lista);
|
|||
end
|
|||
end;
|
|||
g_ips_servidores_aula:= equipos;
|
|||
Asender.Reply.SetReply(311,'Equipo '+ nombre_equipo +','+ ip_equipo +','+ mac_equipo+','+ dominio_equipo+', actualizado');
|
|||
ASender.SendReply;
|
|||
end
|
|||
else
|
|||
begin
|
|||
writeln('Actualizar datos: Orden o número parametros incorrectos');
|
|||
end;
|
|||
except
|
|||
writeln('Error al actualizard datos');
|
|||
end;
|
|||
end;
|
|||
procedure TDataModule1.DataModuleCreate(Sender: TObject);
|
|||
begin
|
|||
IniciarDemonio(38001,'0.0.0.0');
|
|||
end;
|
|||
procedure TDataModule1.IdCmdTCPServer1Connect(AContext: TIdContext);
|
|||
begin
|
|||
try
|
|||
g_ip_conexion:=AContext.Connection.Socket.Binding.IP;
|
|||
except
|
|||
writeln('Error en la conexión');
|
|||
end;
|
|||
end;
|
|||
procedure TDataModule1.IniciarDemonio(iport:integer;ihost:string);
|
|||
const
|
|||
LIBERA_PUERTO:STRING='fuser -k -n tcp 38001';
|
|||
begin
|
|||
try
|
|||
Ejecutar1(LIBERA_PUERTO);
|
|||
sleep(1000);
|
|||
IniciarDemonio1(iport,ihost);
|
|||
except
|
|||
Ejecutar1(LIBERA_PUERTO);
|
|||
sleep(1000);
|
|||
IniciarDemonio1(iport,ihost);
|
|||
end;
|
|||
end;
|
|||
procedure TDataModule1.IniciarDemonio1(iport:integer;ihost:string);
|
|||
var
|
|||
aCommand:TIdCommandHandler;
|
|||
begin
|
|||
try
|
|||
IdCmdTCPServer1:=TIdCmdTCPServer.Create(nil);
|
|||
with IdCmdTCPServer1 do
|
|||
begin
|
|||
Bindings.Clear;
|
|||
Bindings.Add;
|
|||
Bindings.items[0].IP:=ihost;
|
|||
Bindings.Items[0].Port:=38001;
|
|||
DefaultPort:=iport;
|
|||
MaxConnections:=0;
|
|||
ListenQueue:=15;
|
|||
TerminateWaitTime:=5000;
|
|||
aCommand:=CommandHandlers.Add;
|
|||
aCommand.Command := 'actualizarDatosEquipo';
|
|||
aCommand.OnCommand :=@actualizarDatosEquipoCommand;
|
|||
aCommand.Disconnect:=true;
|
|||
aCommand.CmdDelimiter:=#32;
|
|||
aCommand.ParamDelimiter:=#32;
|
|||
aCommand.NormalReply.Code:='311';
|
|||
aCommand.Enabled:=true;
|
|||
OnConnect:=@IdCmdTCPServer1Connect;
|
|||
if active then active:=false;
|
|||
active:=true;
|
|||
end;
|
|||
except
|
|||
writeln('Error al iniciar servidor');
|
|||
end;
|
|||
end;
|
|||
initialization
|
|||
miservidor:=Tservidor.create();
|
|||
DataModule1:=TDataModule1.create(nil);
|
|||
Finalization
|
|||
FreeAndNil(DataModule1);
|
|||
FreeAndNil(miservidor);
|
|||
end.
|