使用delphi 開發多層應用(十六)使用XMLRPC 實現basic4android 遠程調用RTC服務


    RealThinClient (以下簡稱RTC) 也是一款delphi 多層開發的框架,由於其底層通訊協議是自己封裝SOCK 庫,拋棄了

大家詬病的indy,因此表現的非常穩定,效率也非常高,深受很多人的追捧。由於RTC 是從底層通訊做起的,因此通訊層的

功能非常強,但是在中間層數據庫功能雖然有所實現,但是沒有kbmmw 和RO 強,但是對於普通的遠程調用做的非常優雅。

同時它重點在於使用http 協議實現功能調用,因此與kbmmw 的適合場合不完全一樣。

   由於RTC 可以非常快速的建立一個webserver, 因此要實現basic4android 程序訪問RTC 的http 非常方便,但是由於直接訪問

http 文本,服務器端與客戶端都要做解析,不但編碼起來麻煩,而且容易出問題。RTC 沒有提供和KBMMW 一樣的Java 客戶端,

只能通過別的方式使basic4android 直接訪問RTC 的遠程函數,經過研究,發現RTC 支持XMLRPC遠程調用,好,就拿這個開刀吧。

找了一下basic4android 的網站,呵呵,找到我們要的東西了,XMLRPC Library。  下載后解包,放到basic4android 的lib 目錄。

   現在回到delphi 里面,先做一個簡單RTC 應用服務器。

在form 上放置四個rtc 的控件

   server: TRtcHttpServer;
    RtcServerModule1: TRtcServerModule;
    RtcFunctionGroup1: TRtcFunctionGroup;
    RtcFunction1: TRtcFunction;

並放置一個按鈕

對應的屬性:

注意要設置ModuleFileName 為test.

procedure TForm1.Button1Click(Sender: TObject);
begin
   server.Listen();
   Button1.Caption:='已啟動';
   Button1.Enabled:=False;
end;

 rtcfunction1 的執行代碼為

procedure TForm2.RtcFunction1Execute(Sender: TRtcConnection;
  Param: TRtcFunctionInfo; Result: TRtcValue);
var
  num,allnum:integer;
  mynum:TRtcArray;
  i: Integer;
begin
    mynum:=param.asArray['params'];
    num:=mynum[0];
    allnum:=0;
    for i := 1 to num do
     allnum:=allnum+i;
    result.asInteger:=allnum;

end;

好了,服務器代碼完成,編譯運行,並點擊啟動按鈕。

客戶端,我們就利用XMLRPC Library自身所帶的 例子,稍微改動一下,以便於對應我們的服務器。

Sub Activity_Create(FirstTime As Boolean)
    If FirstTime Then
        XMLRPC1.Initialize("XMLRPC1")
    End If
    
    Activity.AddMenuItem("initXMLRPC","mnuXMLRPC")
    Activity.AddMenuItem("Call Method","mnuMethod")
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub mnuXMLRPC_Click
    XMLRPC1.initXMLRPCClient("http://192.168.1.105/test")
End Sub

Sub mnuMethod_Click
    'check whether x Is inside range 4..10
    Dim x As Int
    x = 100
    s=XMLRPC1.intCall("sumall",x)
   Msgbox(s,"")
    
    
     ' XMLRPC1.booleanCall3("isInside", x, 4, 10)
End Sub

好了,運行android 客戶端,點擊菜單,就會出現下面的界面。

 

好了,打完收工。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM