📄 systemdata_datamodule.pas
字号:
{-----------------------------------------------------------------------------
Unit: SystemData_DataModule
Author: Aleyn.wu
Date: 2002-05-12
Descript: Rule Module Service
-----------------------------------------------------------------------------}
unit SystemData_DataModule;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
swServer2_TLB, Provider, DB, ADODB, StdVcl, hmUniKey;
type
TSystemData = class(TRemoteDataModule, ISystemData)
tblAccountOdbc: TADOQuery;
dspAccountOdbc: TDataSetProvider;
dspModules: TDataSetProvider;
Connection: TADOConnection;
private
{ Private declarations }
protected
class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
function AddModule(const Filename: WideString): WordBool; safecall;
function DeleteModule(const Key: WideString): WordBool; safecall;
function StartModule(const Key: WideString): WordBool; safecall;
function StopModule(const Key: WideString): WordBool; safecall;
function WriteConfig: WordBool; safecall;
function GetOnLineUserCount: Integer; safecall;
public
constructor Create(AOwner: TComponent); override;
end;
implementation
uses MainForm_form, dmSystemService;
{$R *.DFM}
constructor TSystemData.Create(AOwner: TComponent);
begin
inherited;
Connection.ConnectionString := frmDataServer.ConnectionString;
end;
class procedure TSystemData.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
begin
if Register then
begin
inherited UpdateRegistry(Register, ClassID, ProgID);
EnableSocketTransport(ClassID);
EnableWebTransport(ClassID);
end
else
begin
DisableSocketTransport(ClassID);
DisableWebTransport(ClassID);
inherited UpdateRegistry(Register, ClassID, ProgID);
end;
end;
function TSystemData.AddModule(const Filename: WideString): WordBool;
begin
dmSysService.mdLibrary.Append;
dmSysService.mdLibrary['Filename'] := Filename;
dmSysService.mdLibrary['LoadWhenStart'] := True;
dmSysService.mdLibrary['UniKey'] := UniKey;
dmSysService.mdLibrary['State'] := 3;
dmSysService.mdLibrary['ModuleAddr'] := 0;
dmSysService.mdLibrary['System'] := False;
dmSysService.mdLibrary.Post;
Result := dmSysService.LoadModuleLibrary(dmSysService.mdLibrary['UniKey'], False);
if not Result then dmSysService.mdLibrary.Delete;
end;
function TSystemData.DeleteModule(const Key: WideString): WordBool;
begin
if dmSysService.mdLibrary.Locate('UniKey', Key, []) then
begin
if dmSysService.mdLibrary.FieldByName('System').AsBoolean then
raise Exception.Create('Can not delete Default Module')
else
Result := dmSysService.FreeModuleLibrary(Key, False);
end
else
Result := False;
if Result then dmSysService.mdLibrary.Delete;
end;
function TSystemData.StartModule(const Key: WideString): WordBool;
begin
Result := dmSysService.LoadModuleLibrary(Key, True);
end;
function TSystemData.StopModule(const Key: WideString): WordBool;
begin
Result := dmSysService.FreeModuleLibrary(Key, True);
end;
function TSystemData.WriteConfig: WordBool;
begin
try
frmDataServer.IniFile.RootKey := 'ExtendModule';
frmDataServer.IniFile.ClearKeys;
dmSysService.mdLibrary.First;
while not dmSysService.mdLibrary.Eof do
begin
if not dmSysService.mdLibrary.FieldByName('System').AsBoolean then
begin
frmDataServer.IniFile.AppendKey;
frmDataServer.IniFile['ModuleName'] := dmSysService.mdLibrary['ModuleName'];
frmDataServer.IniFile['Library'] := dmSysService.mdLibrary['Filename'];
end;
dmSysService.mdLibrary.Next;
end; // while
dmSysService.mdLibrary.First;
frmDataServer.IniFile.SaveToFile('swServer2.ini');
Result := True;
except
Result := False;
end;
end;
function TSystemData.GetOnLineUserCount: Integer;
begin
Result:=OnLineUserCount;
end;
initialization
TComponentFactory.Create(ComServer, TSystemData,
Class_SystemData, ciMultiInstance, tmApartment);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -