pascalabcnet/TestSamples/CompilationSamples/VPNController.pas

101 lines
2.6 KiB
ObjectPascal
Raw Normal View History

2015-05-14 22:35:07 +03:00
uses CRT, System.Net.NetworkInformation, System.Diagnostics;
const PingTimeOut = 3000;
procedure StartAndWait(Command:string; args: string);
var Pr:Process;
begin
Pr := new Process;
//Pr.StartInfo.CreateNoWindow := true;
Pr.StartInfo.UseShellExecute := false;
Pr.StartInfo.FileName := Command;
Pr.StartInfo.Arguments := args;
Pr.StartInfo.RedirectStandardOutput := true;
Writeln(Command + ' ' + args);
Pr.Start;
try
//Pr.BeginOutputReadLine();
Writeln(Pr.StandardOutput.ReadToEnd);
//Pr.WaitForExit();
except
Writeln('<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ' + Command);
end;
end;
function PingAdress(IP: string): boolean;
var IPPing: Ping;
res: PingReply;
begin
IPPing := new Ping;
Result := true;
try
ClearLine;
Write('Ping ' + IP + '...');
res := IPPing.Send(IP, PingTimeOut);
except
Result := false;
end;
if Result then
Result := res.Status = IPStatus.Success;
ClearLine;
if Result then
Write('Ping ' + IP + '... OK')
else
Write('Ping ' + IP + '... ERROR');
Sleep(1000);
end;
procedure SleepSEC(sec: integer; msg: string);
begin
for var i:=1 to sec do begin
ClearLine;
Write(String.Format(msg,sec-i));
Sleep(1000);
end;
end;
procedure WritelnWithTime(s: string);
begin
Writeln(String.Format('[{0}] {1}', System.DateTime.Now.ToLongTimeString, s));
end;
procedure WriteWithTime(s: string);
begin
Write(String.Format('[{0}] {1}', System.DateTime.Now.ToLongTimeString, s));
end;
var VPNIP, IP, ServiceName: string;
CheckPeriod, VPNRestartWait: integer;
begin
Writeln('VPNController v0.1 (c) DarkStar 2007');
try
ServiceName := CommandLineArgs[0];
IP := CommandLineArgs[1];
VPNIP := CommandLineArgs[2];
CheckPeriod := System.Convert.ToInt32(CommandLineArgs[3]);
VPNRestartWait := System.Convert.ToInt32(CommandLineArgs[4]);
except
Writeln('Comman Line Args: ServiceName IP VPNIP CheckPeriod VPNRestartWait');
exit;
end;
while true do begin
SleepSEC(CheckPeriod,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> {0} <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>');
if not PingAdress(VPNIP) then begin
if not PingAdress(IP) then begin
Writeln;
WritelnWithTime('<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> '+ IP);
end else begin
Writeln;
WritelnWithTime('<27><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> ' + VPNIP);
WritelnWithTime('<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '+ServiceName+'...');
StartAndWait('NET','STOP '+ServiceName);
SleepSEC(VPNRestartWait,'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '+ServiceName+'... {0}');
Writeln;
StartAndWait('NET','START '+ServiceName);
end;
end else begin
WriteWithTime('<27><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>');
end;
end;
end.