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 客户端,点击菜单,就会出现下面的界面。
好了,打完收工。