⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 systemdata_datamodule.pas

📁 Delphi三层原代码掩饰及补丁
💻 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 + -