ProGestion/Servidor/uDataModuleServer.pas
2007-06-21 16:12:43 +00:00

221 lines
5.6 KiB
ObjectPascal

unit uDataModuleServer;
interface
uses
SysUtils, Classes, uDAEngine, uDAIBXDriver, uDAClasses, uDADriverManager,
uROClient, uROBinMessage, uROServer, uROIndyTCPServer, uROIndyHTTPServer,
uROSessions, uDADataTable, uDABINAdapter, IBSQLMonitor, JvComponent,
JvAppStorage, JvAppRegistryStorage, uDAInterfaces, JvComponentBase;
type
TdmServer = class(TDataModule)
HTTPServer: TROIndyHTTPServer;
BINMessage: TROBinMessage;
IBXDriver: TDAIBXDriver;
DriverManager: TDADriverManager;
SessionManager: TROInMemorySessionManager;
DADiagrams: TDADiagrams;
JvAppRegistryStorage: TJvAppRegistryStorage;
ConnectionManager: TDAConnectionManager;
DataDictionary: TDADataDictionary;
procedure DataModuleCreate(Sender: TObject);
procedure HTTPServerBeforeServerActivate(Sender: TObject);
private
FConnectionName : string;
FConnectionString : string;
function GetConnectionString: string;
property ConnectionString : string read GetConnectionString;
public
FDBServer : string;
FDBPort : string;
FDBPath : string;
FDBUser : string;
FDBPass : string;
FInicioWindows : Boolean;
FServerPort : string;
function LeerConfiguracion : Boolean;
procedure SalvarConfiguracion;
procedure Configurar;
procedure Restart;
property ConnectionName : string read FConnectionName write FConnectionName;
end;
function DarRutaInformes : String;
function Encrypt (const Source : string) : String;
function Decrypt (const Source : string) : String;
function GetNextAutoinc(AConnection : IDAConnection; const GeneratorName: string): integer;
var
dmServer: TdmServer;
implementation
{$R *.dfm}
uses
Forms, fServerForm, Registry, Windows, Dialogs, uConfiguracion;
function DarRutaInformes : String;
begin
Result := ExtractFilePath(Application.ExeName) + 'Informes' + PathDelim;
end;
function Encrypt (const Source : string) : String;
var
i:integer;
begin
Randseed := 28;
Result := '';
for i:=1 to length(Source) do
Result := Result + chr(ord(Source[i]) + Random(10) + 1);
end;
function Decrypt (const Source : string) : String;
var
i : integer;
begin
Randseed:= 28;
Result := '';
for i := 1 to length(Source) do
Result := Result + chr(ord(Source[i]) - Random(10) - 1);
end;
function GetNextAutoinc(AConnection : IDAConnection; const GeneratorName: string): integer;
var
ds: IDADataset;
begin
ds := AConnection.NewDataset(Format('SELECT Gen_id(%s,1) FROM RDB$Database', [GeneratorName]));
ds.Open;
result := ds.Fields[0].Value;
ds.Close;
end;
procedure WriteAutoRun(Name, Value : String);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.LazyWrite := False;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', False);
reg.WriteString(Name, Value);
reg.CloseKey;
finally
reg.free;
end;
end;
procedure DeleteAutoRun(Name : String);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.LazyWrite := False;
reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', False);
if reg.ValueExists(Name) then
reg.DeleteValue(Name);
reg.CloseKey;
finally
reg.free;
end;
end;
procedure TdmServer.Configurar;
var
AForm : TForm;
begin
AForm := TfConfiguracion.Create(NIL);
try
AForm.ShowModal;
finally
AForm.Free;
end;
end;
procedure TdmServer.DataModuleCreate(Sender: TObject);
begin
if not LeerConfiguracion then
Configurar;
Restart;
end;
function TdmServer.GetConnectionString: string;
begin
Result := 'IBX?Server=' + FDBServer + '/' + FDBPort
+ ';Database=' + FDBPath
+ ';UserID=' + FDBUser
+ ';Password=' + Decrypt(FDBPass)
+ ';Dialect=3;Charset=ISO8859_1;';
end;
function TdmServer.LeerConfiguracion : Boolean;
begin
Result := False;
with JvAppRegistryStorage do
begin
FDBServer := ReadString('ServerDB');
FDBPort := ReadString('PortDB');
FDBPath := ReadString('PathDB');
FDBUser := ReadString('UserDB');
FDBPass := ReadString('PassDB');
FServerPort := ReadString('ServerPort');
FInicioWindows := ReadBoolean('InicioWindows');
end;
Result := (Length(FDBServer) > 0) and
(Length(FDBPort) > 0) and
(Length(FDBPath) > 0) and
(Length(FDBUser) > 0) and
(Length(FDBPass) > 0) and
(Length(FServerPort) > 0);
end;
procedure TdmServer.Restart;
begin
HTTPServer.Active := False;
ConnectionManager.Connections.GetDefaultConnection.ConnectionString := '';
ConnectionName := ConnectionManager.GetDefaultConnectionName;
ConnectionManager.Connections.GetDefaultConnection.ConnectionString := GetConnectionString;
HTTPServer.Active := TRUE;
end;
procedure TdmServer.SalvarConfiguracion;
begin
with JvAppRegistryStorage do
begin
BeginUpdate;
try
WriteString('ServerDB', FDBServer);
WriteString('PortDB', FDBPort);
WriteString('PathDB', FDBPath);
WriteString('UserDB', FDBUser);
WriteString('PassDB', FDBPass);
WriteString('ServerPort', FServerPort);
WriteBoolean('InicioWindows', FInicioWindows);
if FInicioWindows then
WriteAutoRun('ProGestion Server', Application.ExeName)
else
DeleteAutoRun('ProGestion Server');
finally
EndUpdate
end;
end;
end;
procedure TdmServer.HTTPServerBeforeServerActivate(Sender: TObject);
begin
HTTPServer.Port := StrToInt(FServerPort);
end;
end.