uniGUI試用ノート(一)

7317 ワード

ウィザードを使用してuniGUIアプリケーションサーバを作成します.プロジェクトには3つのファイルがあります.
TUniServerModule = class(TUniGUIServerModule)

TUniMainModule = class(TUniGUIMainModule)

TMainForm = class(TUniForm)

(1)TuniServerModuleインスタンスオブジェクトを共有する単一のモードを採用しており、以下のコードから分かるように、
function UniServerModule: TUniServerModule;

 implementation

 {$R *.dfm}

 uses
  UniGUIVars;

function UniServerModule: TUniServerModule;
begin
  Result:=TUniServerModule(UniGUIServerInstance);
end;

initialization
RegisterServerModuleClass(TUniServerModule);

 
グローバル変数UniGUIServerInstanceで一意化されたTuniServerModuleインスタンスオブジェクトは、同じグローバル制御オブジェクトと見なすことができ、必要に応じてオブジェクトプールを構築するなど、TuniGUIServerModuleクラスに一意化が必要なオブジェクトを構築することができます.
(2)各クライアント接続後、システムはTUNiMainModuleオブジェクトを作成し、各クライアント接続をサポートし、管理する.実現メカニズムはソースコードがないため、まだしばらく見えない.そのインスタンスの取得コードは以下の通りである.
function UniMainModule: TUniMainModule;

implementation

{$R *.dfm}

uses
  UniGUIVars, ServerModule, uniGUIApplication;

function UniMainModule: TUniMainModule;
begin
  Result := TUniMainModule(UniApplication.UniMainModule)
end;

 
グローバル変数UniApplicationの属性UniMainModuleによるTUNiMainModuleインスタンスオブジェクトの呼び出しは、異なるクライアント接続をどのように区別するかは不明です.クラスの登録コードは次のとおりです.
initialization
  RegisterMainModuleClass(TUniMainModule);

TuniGUIMainmoduleインスタンスは、各接続の制御オブジェクトとみなされ、データベース接続とデータセットをクラスに配置できます.データセットが非常に多い場合は、複数のTDataModuleを動的に作成し、TuniGUIMainmoduleインスタンスによって管理およびメンテナンスすることも考えられます.三層構造であればTSQLConnectionもこのModuleに入れるべきです.
(3)メインフォームはTUNIFormクラスであり、アプリケーションによって構築されたフォームであり、登録によって以下のように実現される.
function MainForm: TMainForm;

implementation

{$R *.dfm}

uses
  uniGUIVars, MainModule, uniGUIApplication;

function MainForm: TMainForm;
begin
  Result := TMainForm(UniMainModule.GetFormInstance(TMainForm));
end;

以下のコードで登録する
initialization
  RegisterAppFormClass(TMainForm);

すべてのアプリケーション構築フォームは、上記の方法で実現され、アプリケーションによってライフサイクルが制御されます.また、Freeフォームをカスタマイズして、フォームの作成と解放を自分で制御することもできます.
つまり、TUNiServer Moduleインスタンスオブジェクトをグローバル制御オブジェクトと見なし、TUNiMainModuleオブジェクトを各接続制御オブジェクトと見なし、最初に登録されたTUNiFormクラスApplicationフォームをメインフォームとすることができます.
(4)各接続スレッドへのアクセスはUniServerModule.SessionManager.Sessionsは次のように取得し、さらに処理します.
procedure TUniMainModule.UniGUIMainModuleCreate(Sender: TObject);
var
  I : Integer;
  ASessionList: TList;
  ASession : TUniGUISession;
begin
  {   }
  ASessionList := UniServerModule.SessionManager.Sessions.SessionList.LockList;

  try
    {   }
    for I := 0 to ASessionList.Count-1 do
    begin
      ASession := TUniGUISession(ASessionList[I]);
      if not ASession.IsTerminated then
        {  ,  ASession.UniApplication.RemoteAddress }
    end;
  finally
    {   }
    UniServerModule.SessionManager.Sessions.SessionList.UnlockList;
  end;
end;

現在のスレッドオブジェクトには、TUNiMainModuleインスタンスまたはTUNiFormインスタンスで直接アクセスすることもできます.たとえば、次のようになります.
procedure TUniMainModule.UniGUIMainModuleDestroy(Sender: TObject);
var
  strClientIP : String;
begin
  strClientIP := UniSession.UniApplication.RemoteAddress;
  {   }
end;