日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

uniGUI试用笔记(一)

發(fā)布時(shí)間:2024/4/17 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uniGUI试用笔记(一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

uniGUI試用筆記(一)

通過向?qū)?chuàng)建一個(gè)uniGUI應(yīng)用服務(wù)器,工程中有三個(gè)文件:

TUniServerModule = class(TUniGUIServerModule)TUniMainModule = class(TUniGUIMainModule)TMainForm = class(TUniForm)

(1)采用了單例模式,所有客戶端共用一個(gè)TUniServerModule實(shí)例對象,從下面代碼可以看出:

function UniServerModule: TUniServerModule;implementation{$R *.dfm}usesUniGUIVars;function UniServerModule: TUniServerModule; beginResult:=TUniServerModule(UniGUIServerInstance); end;initialization RegisterServerModuleClass(TUniServerModule);

?

用全局變量UniGUIServerInstance實(shí)現(xiàn)了唯一化的TUniServerModule實(shí)例對象,可以視同為全局控制對象,將一些需要唯一化的對象構(gòu)建在TUniGUIServerModule類中,比如可以考慮構(gòu)建數(shù)據(jù)庫連接池,如果有必要也可以構(gòu)建對象池。

(2)每個(gè)客戶端連接后,系統(tǒng)創(chuàng)建了一個(gè)TUniMainModule對象,用于支撐和管理每個(gè)客戶端連接,實(shí)現(xiàn)機(jī)理由于沒有源碼還暫時(shí)看不出,其實(shí)例的獲取代碼如下:

function UniMainModule: TUniMainModule;implementation{$R *.dfm}usesUniGUIVars, ServerModule, uniGUIApplication;function UniMainModule: TUniMainModule; beginResult := TUniMainModule(UniApplication.UniMainModule) end;

?

通過全局變量UniApplication的屬性UniMainModule實(shí)現(xiàn)對TUniMainModule實(shí)例對象的調(diào)用,如何區(qū)分不同客戶端連接的還不清楚。類的注冊代碼如下:

initializationRegisterMainModuleClass(TUniMainModule);

TUniGUIMainModule實(shí)例視同每個(gè)連接的控制對象,可以將數(shù)據(jù)庫連接和數(shù)據(jù)集放在該類中,如果數(shù)據(jù)集非常多,也可以考慮動態(tài)創(chuàng)建多個(gè)TDataModule,并由TUniGUIMainModule實(shí)例進(jìn)行管理和維護(hù)。如果是三層結(jié)構(gòu),則TSQLConnection也應(yīng)放在這個(gè)Module中。

(3)主窗體是一個(gè)TUniForm類,且是一個(gè)Application構(gòu)建的窗體,通過注冊實(shí)現(xiàn),如下:

function MainForm: TMainForm;implementation{$R *.dfm}usesuniGUIVars, MainModule, uniGUIApplication;function MainForm: TMainForm; beginResult := TMainForm(UniMainModule.GetFormInstance(TMainForm)); end;

通過以下代碼進(jìn)行注冊

initializationRegisterAppFormClass(TMainForm);

所有Application構(gòu)建窗體都是通過上述方式實(shí)現(xiàn),由Application控制其生命周期。也可以自定義Free窗體,自己控制窗體的創(chuàng)建和釋放。

總之,可以將TUniServerModule實(shí)例對象視作全局控制對象,TUniMainModule對象視作每個(gè)連接控制對象,第一個(gè)注冊的TUniForm類Application窗體為主窗體。

(4)對每個(gè)連接線程的訪問可以通過UniServerModule.SessionManager.Sessions獲取并作進(jìn)一步處理,如下:

procedure TUniMainModule.UniGUIMainModuleCreate(Sender: TObject); varI : Integer;ASessionList: TList;ASession : TUniGUISession; begin{ 鎖定列表 }ASessionList := UniServerModule.SessionManager.Sessions.SessionList.LockList;try{ 訪問每個(gè)線程 }for I := 0 to ASessionList.Count-1 dobeginASession := TUniGUISession(ASessionList[I]);if not ASession.IsTerminated then{ 進(jìn)行處理,如客戶端地址 ASession.UniApplication.RemoteAddress }end;finally{ 釋放列表 }UniServerModule.SessionManager.Sessions.SessionList.UnlockList;end; end;

也可以在TUniMainModule實(shí)例或TUniForm實(shí)例中直接訪問當(dāng)前線程對象,如:

procedure TUniMainModule.UniGUIMainModuleDestroy(Sender: TObject); varstrClientIP : String; beginstrClientIP := UniSession.UniApplication.RemoteAddress;{ 進(jìn)一步處理 } end;

轉(zhuǎn)載于:https://www.cnblogs.com/yerongtian/p/11112489.html

總結(jié)

以上是生活随笔為你收集整理的uniGUI试用笔记(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。