zoukankan      html  css  js  c++  java
  • datasnap回调

    回调

    除了用REST支持调用DataSnap服务方法外,JSON还用于实现回调方法.DataSnap2010支持客户端回调
    函数,使其执行在服务方法上下文中.这样就可以实现客户端调用服务端方法时,服务端就可以调用由客户端传
    递好参数的回调函数.

    例如,我们修改EchoString方法,向其中添加回调支持.修改后的EchoString方法如下:

    function EchoString(Value: string; callback: TDBXcallback): string;

    TDBXcallback类定义在DBXJSON单元.在我们实现EchoString方法前,先搞清楚如何在客户端定义回调函
    数(毕竟,这是一个可以让服务端调用的客户端方法).

    在客户端,我们必须定义一个新类,继承在TDBXCallback,重写其Execute方法.

    type

    TCallbackClient = class(TDBXCallback)

    public

    function Execute(const Arg: TJSONValue): TJSONValue; override;

    end;

    在Execute方法中,有一个TJSONValue类型的参数,可以复制(Clone)这个参数然后设置其具体内
    容.Execute方法也返回一个TJSONValue类型的值,这里我们只返回同样的值:

    function TCallbackClient.Execute(const Arg: TJSONValue): TJSONValue;

    var

    Data: TJSONValue;

    begin

    Data := TJSONValue(Arg.Clone);


    ShowMessage('Callback: ' + TJSONObject(Data).Get(0).JSonValue.value);

    Result := Data

    end;

    例如, 在方法实际返回前(如方法正在执行),回调函数将显示EchoString方法传递参数的值.服务端新的
    EchoString方法实现需要将String值赋给一个TJSONObject对象,并将其传递给回调函数.如下:

    function TServerMethods2.EchoString(Value: string; callback: TDBXcallback): string;

    var

    msg: TJSONObject;

    pair: TJSONPair;

    begin

    Result := Value;

    msg := TJSONObject.Create;

    pair := TJSONPair.Create('ECHO', Value);

    pair.Owned := True;

    msg.AddPair(pair);

    callback.Execute(msg);

    end;

    注意这个回调函数将在客户端执行—然后在服务端Echostring方法执行完毕前返回

    最后,在客户端调用EchoString方法也需要修改,因为我们现在要提供一个回调类TCallbackClient的实例,如
    下所示:

    var

    MyCallback: TCallbackClient;

    begin

    MyCallback := TCallbackClient.Create;

    try

    Server.EchoString(Edit1.text, MyCallback);

    finally

    MyCallback.Free;

    end;

    end;

    这个范例阐释了如何在DataSnap2010中使用客户端回调函数.

  • 相关阅读:
    Solr6.6环境安装及core的创建(win7环境)
    使用Druid作为数据源
    Windows远程数据同步工具cwRsync
    解读zookeeper的配置项
    堵塞与非堵塞原理
    Apache Hadoop2.0之HDFS均衡操作分析
    转到简书去了
    淘宝技术这十年概要
    Facebook广告API系列 Business Manager
    Facebook广告API系列 3 Ads Management
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2347151.html
Copyright © 2011-2022 走看看