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 客戶端,點擊菜單,就會出現下面的界面。
好了,打完收工。