zoukankan      html  css  js  c++  java
  • datasnap的客户端回传机制

    最近,学习XE6下的DataSnap回叫技术编译代码,体会如下:
    第一篇 服务器与客户端回叫
       从Delphi2010开始,DataSnap支持回叫(Call Back)机制。这样,在调用耗时较长的方法时,通过回叫机制,返回服务器进程或正在处理的目标对象。
        一、客户端实现步骤     在客户端声明TClientModule1的单元文件uClientModule中:     1、声明一个从TDBXCallback继承下来的对象(用于回叫参数值),并实现复载的步骤。
    type   TInitCallback = class(TDBXCallback)     function Execute(const Arg: TJSONValue): TJSONValue; override;   end;
      TProgCallback = class(TDBXCallback)     function Execute(const Arg: TJSONValue): TJSONValue; override;   end;
        2、初始化创建该对象
    Initialization      // 初始化 创建   InitCallback := TInitCallback.Create;   ProgCallback := TProgCallback.Create;
        3、实现声明的方法
    function TProgCallback.Execute(const Arg: TJSONValue): TJSONValue; begin   with MainFrm do   begin     ProgressBar1.Position  := TJSONNumber(Arg).AsInt;     Button5.Enabled := (TJSONNumber(Arg).AsInt = ProgressBar1.Max);   end;   //刷新屏幕   Application.ProcessMessages;   Result := TJSONNull.Create;     // 回传Null值 end;
    function TInitCallback.Execute(const Arg: TJSONValue): TJSONValue; begin   with MainFrm do   begin     ProgressBar1.Max := TJSONNumber(Arg).AsInt;     ProgressBar1.Step := 5;     Edit1.Text := '总时长:' + TJSONNumber(Arg).ToString + '秒';     Button5.Enabled := False;   end;   Result := TJSONNull.Create; end;
        4、调用回叫方法 procedure TMainFrm.Button5Click(Sender: TObject); begin   ClientModule1.ServerMethods1Client.LongTimeRunFunc(InitCallback, ProgCallback); end;
        二、服务器端实现步骤     在服务器端声明TServerMethods1的单元文件uServerMethods中:     1、编写一个带回叫机制的方法     在方法的形参中,带入客户端的回叫参数:
    function TServerMethods1.LongTimeRunFunc(InitCallback, ProgCallback: TDBXCallback): boolean; var Max: Integer;     I: Integer; begin   Max := Random(120) + 1;   InitCallback.Execute(TJSONNumber.Create(Max)).Free;   // 将Max值通过JSON格式,通过InitCallback执行回叫后,释放该对象   for I := 0 to Max do   begin     ProgCallback.Execute(TJSONNumber.Create(I)).Free;   // 将I值通过JSON格式,通过ProgCallback执行回叫后,释放该对象     sleep(1000);   end;   Result := True; end;
        2、声明该方法
      public     { Public declarations }     function LongTimeRunFunc(InitCallback, ProgCallback: TDBXCallback): boolean; 
        三、客户端声明服务器端输入方法的对象     服务器端声明的方法(对象),需要在客户端中声明,才能使得二者之间实现数据传递。     1、执行服务器端程序。     2、在客户端的ClientModule1的单元,通过鼠标右键点击SQLConnection1,选择“Generate DataSnap client classses”项目。
        四、运行机制     客户端声明的TProgCallback是继承TDBXCallback的对象,它复载虚方法Execute,在服务器端运行,接受一个TJSONValue的参数,并且回传一个TJSONValue的结果值。TDBXCallback的回叫机制很有意思:服务器端在回叫客户端的方法时,可以将需要回传缎带客户端的值或对象,以TJSONValue的形式,当作虚方法Execute的参数回传缎带客户端,而客户端的方法,在被回叫执行完毕后,也可以将执行结果,以TJSONValue的形式,回传给服务器端。

  • 相关阅读:
    AVAudioSession
    (whh仅供自己参考)进行ip网络请求的步骤
    1、大部分社交平台接口不支持https协议。
    怎样在官网上下载xcode7.2
    ios9 http请求失败的问题
    真机测试最详细的步骤
    svn的初级使用
    framework not found -fno-arc编译错误
    单例对象
    IOS6学习笔记(三)
  • 原文地址:https://www.cnblogs.com/HuiLove/p/3964407.html
Copyright © 2011-2022 走看看