进阶DataSnap回叫功能(李维)_第1页
进阶DataSnap回叫功能(李维)_第2页
进阶DataSnap回叫功能(李维)_第3页
进阶DataSnap回叫功能(李维)_第4页
进阶DataSnap回叫功能(李维)_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Delphi/C++Builder2010加入了回叫機,我也在2009年的部落格章中說明如何使用Delphi/C++Builder的回叫.然Delphi/C++BuilderXE又次強化了回叫機制讓這個功能更為大和完善由於XE版回叫機制提供了眾多新的功能因此我想由這篇文說明一下如何用XE版回叫機制,雖然我法一次把有的功能完,但起個還是很有的DataSnapXE在原的基礎回機制之上加入了許多強大的新功能,從DataSnapXE開始發人員可以使用面的回叫能

用戶端可向伺服端註冊回叫通道此一來伺服器可以一次回叫所有在同回叫通道中所有註冊的用戶端回叫函式用戶端可以同時註冊多個不同的回叫通道用戶端可以藉由回叫通道呼叫不同的用戶端新增回叫元件以幫助開發人員簡化開發回叫機制DataSnapXE新的回叫功雖然很多,使用起來然相當的易,下面說明了如何使用這些DataSnapXE的回叫能的基本驟:

用戶端使用TDSClientCallbackChannelManager向伺器註冊一個回叫通道伺服器使用TDSServer元的BroadcastMessage方法叫所有註冊的用戶端當然,開發員可以更一步的使DataSnap進階的回叫能,不過那之前也許我們應該先說明數個例讓讀者解如何使這些基本的步驟。開發回叫DataSnap伺器在Delphi整合發展環境中建立一個DataSnapServer案:

在設定此伺器的特性,讓我們前只選擇使用TCP/IP通訊協定,下圖所示:開啟專案中ServerContainer程式單元,時在ServerContainer中產生了個元件,TDSServer以及TDSTCPServerTransport接下來我們將先展示Windows用戶端的回功能,因此現在使TCP/IP通訊定就足夠。

現在開啟專主表單,且在其中入如下的元件:主表格上方用了元件它可以顯示所有用戶端註冊的回叫別ID,下方TMemo元件則是使來回叫註用戶端在稍後我將在此TMemo元件中入資訊些入的資訊就會藉由回叫道自動傳給用戶端DataSnap伺服器要回所有註冊用戶端是非常容易的,只需要藉由TDSServer類定義的BroadcastMessage方法可,TDSServer類別中定義了兩BroadcastMessage方法原型如下1.functionBroadcastMessage(constChannelName:String;constTJSONValue;ArgType:=TDBXCallback.ArgJson):boolean;overload;2.3.4.5.functionBroadcastMessage(constChannelName:String;constCallbackId:String;constTJSONValue;ArgType:=TDBXCallback.ArgJson):boolean;overload;复制代码這兩個BroadcastMessage方法的差在於上第一個BroadcastMessage可傳遞訊息它第一個參數ChannelName指的通道中所的回叫用端,而第個BroadcastMessage方則是只傳遞訊息給第一個參ChannelName指定的道中由第個參數CallbackId指定的回用戶端,最後這兩個BroadcastMessage方法傳遞給用戶端的訊息則由第二個參數Msg封裝。

瞭解了如何用BroadcastMessage方法之後,我們就可以看看如何把DataSnap伺器中於TMemo元中輸入的訊息傳遞給回叫用戶端。在為主表中的TMemo件實OnChange件處理函式如:1.001procedureTForm17.mmMessageChange(Sender:2.3.002var4.5.003vMessageTJSONString;6.7.004begin8.9.005vMessageTJSONString.Create(mmMessage.Lines.Text);10.11.ServerContainer5.DSServer1.BroadcastMessage(DEMOChannel,vMessage);12.13.end;复制代码在行我把輸入於TMemo(mmMessage)中的訊以TJSONString物件封裝,後在行藉由呼叫ServerContainer中的TDSServer元件的BroadcastMessage方法傳給所有註的用戶端是註冊的用端呢?請看BroadcastMessage第一個數DEMOChannel表DataSnap伺服器會傳資訊給所在DEMOChannel通道中註的用戶端DEMOChannel是個通道的名稱,我們在DataSnap伺服器中定義它如下:1.const2.3.DEMOChannel=‘DemoChannel’;复制代码因此用戶端要使用這名稱向伺器註冊回叫通道的話,就可以讓DataSnap伺服器回用戶

端,當然也戶端可以向伺服器詢已經定義在DataSnap伺器中的回叫通道名稱,或是由用戶端自行伺服器中建指定名稱回叫通道由於回叫用端是向DataSnap伺服器指定名的回叫通道註冊,而且一個用戶都使用一個特定的回識別ID來代表,因我們也可以藉由TDSServer元件來詢某一個名稱的回叫通道中所有註的用戶端叫識別ID此範例DataSnap伺服主表單的『列出所回叫識別按鈕的OnClick事件處函式就可在主表單上的TListBox中列出定回叫通道中所有的用戶端回叫識ID,面就是它OnClick實程式碼:1.001procedureTForm17.Button1Click(Sender:2.3.002var4.5.003aIdListTList<String>;6.7.004sIdString;8.9.005begin10.11.

aIdList:=ServerContainer5.DSServer1.GetAllChannelCallbackId(DEMOChannel);12.13.try14.15.forinaIdList16.17.ListBox1.Items.Add(sId);18.19.finally20.21.aIdList.Free;22.23.end

24.25.end;复制代码GetAllChannelCallbackId方會回傳TList<String>型的執行結果其中即包了所有在通名稱註冊用戶端回叫識別ID,因在006行藉由TDSServer元件呼叫GetAllChannelCal

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论