回叫信道

回叫信道

    DataSnap XE3新增回叫信道功能。技术关键点:
    (1)TDBXCallback机制;
    (2)TDServer.BroadcastMessage方法;
    (3)TDSClientCallbackChanneManager1.RegisterCallback方法;
    一、回叫的方式
    1、服务器端回叫所有(同一信道)客户端
    2、客户端回叫(同一信道)的其它客户端                                                                       
    3、客户端可以注册多个信道

    二、服务器端对回叫信道的设置
    1、服务器端回叫信道的注册
    编程时,将相关的回叫信道字符,确定下来,便于代码中识别调用。 
const DEMOChannel='DemoChannel';

    2、服务器端对客户端的回叫
    服务器端使用 TDServer组件的BroadcastMessage方法回叫所有注册的客户端。
    TDServer组件重载了二个的BroadcastMessage方法
    (1)使用二参数
function BroadcastMessage(const ChannelName:String; const Msg: TJSONValue; const ArgType:Integer=TDBXCallback.ArgJason):boolean; overload;
    第1参数ChannelName指定通道中所有的回叫客户端;
    第2参数Meg回传;
    功能:通过Meg传递信息给带ChannelNamer指定的全部客户端。

    (2)使用三参数
function BroadcastMessage(const ChannelName:String; const CallbackID:String;  const Msg: TJSONValue; const ArgType:Integer=TDBXCallback.ArgJason):boolean; overload;
    第1参数ChannelName指定通道中所有的回叫客户端;
    第2参数CallbackID指定客户端的识别码;
    第3参数Meg回传;
    功能:通过Meg传递信息给带ChannelNamer中,指定的CallbackID客户端。

    实例:例如在服务器端的TMemo1.onChange事件中:
procedure TSMainFrm.mmMessageChange(Sender: TObject);
var vMessage:TJSONString;
begin
  vMessage := TJSONString.Create(mmMessage.Lines.Text);
  ServerContainer1.DSServer1.BroadcastMessage(DEMOChannel, vMessage);
end;

    3、服务器端对客户端注册的回叫通道的搜索
    (1)搜索注册回叫通道的客户端ID,通过DSServer1.GetAllChannelClientId方法实现,代码如下:

procedure TForm1.btnListAllClientIdsClick(Sender: TObject);
var
  aIdList : TList<String>;
  sId : String;
begin
  aIdList := ServerContainer5.DSServer1.GetAllChannelClientId(DEMOChannel);
  try
    for sId in aIdList do
      lbAllClientIds.Items.Add(sId);
  finally
    aIdList.Free;
  end;
end;

    (2)搜索注册回叫通道客户端的回叫ID ,通过DSServer1.GetAllChannelCallbackId方法实现,代码如下:

procedure TForm1.btnListAllCallbackIdsClick(Sender: TObject);
var
  aIdList : TList<String>;
  sId : String;
begin
  aIdList := ServerContainer5.DSServer1.GetAllChannelCallbackId(DEMOChannel);
  try
    for sId in aIdList do
      lbAllCallbackIds.Items.Add(sId);
  finally
    aIdList.Free;
  end;
end;

    三、客户端对回叫信道的设置
    1、客户端注册
    客户端注册回叫信道,由TDSClientCallbackChannelManager1.RegisterCallback方法实现;执行语句如下:
TDSClientCallbackChanneManager1.RegisterCallback(Combobox1.Text, TDemoCallback.Create);
    现在我们看一看,客户端向服务器端注册回叫信道时,上述代码包含了注册回叫通道的四个要素:
    (1)回叫通道ID,TDSClientCallbackChanneManager.ChannelNament属性值;相关字符应与服务器注册的“回叫信道”字符一致。
    (2)客户端ID,TDSClientCallbackChanneManager.ManagerID属性值;每个客户端应明确一个唯一的识别码。
    (3)回叫ID ,由TDSClientCallbackChanneManager1.RegisterCallback方法的第1个参数;
    (4)回叫方法,由TDSClientCallbackChanneManager1.RegisterCallback第2个参数带入,创建TDemoCallback继承的方法,该对象复载Execute方法,就是用于回叫识别。


    2、客户端与客户端之间的回叫,使用TDSAdminClient类别的NotifyCallback方法
    XE在DSProxy单元,增加TDSAdminClient类别,强化回叫功能。其中TDSAdminClient类别的NotifyCallback方法用于客户端之间的回叫,可以回叫指定回叫通道中的特定客户端(客户端ID)或回叫识别(回叫ID)的客户端。声明如下:

function NotifyCallback(ChannelName:string; ClientID:string;CallbackID:string;Msg:TJSONValue; out Respones :TJSONValue):Boolean;

    NotifyCallback方法的参数含意:
    (1)ChannelName,回叫通道名称;
    (2)ClientID,客户端识别;
    (3)CallbackID,回叫识别;
    (4)Msg,传递信息;
    (5)Respones,被叫客户端的回传信息。
    实例如下:
procedure TfmMainForm.btnBroadcastToClientClick(Sender: TObject);
var
  LClient: TDSAdminClient;
  LMessage: TJSONString;
  LResponse: TJSONValue;
  LConnection: TDBXConnection;
begin
  LConnection := scnnCallbackServer.DBXConnection;
  LClient := TDSAdminClient.Create(LConnection, False);
  try
    LMessage := TJSONString.Create(Format('呼叫通道:%s,客户端识别:%s,回叫识别:%s,回叫信息:%s',
      [DemoChannelManager.ChannelName, cbClientIds.Text, cbCallbackIds.Text, mmChannelCallbacks.Text]));
    try
      LClient.NotifyCallback(DemoChannelManager.ChannelName, cbClientIds.Text, cbCallbackIds.Text, LMessage, LResponse);
      try
        if LResponse <> nil then
          edtResponse.Text := Format('客户端响应:%s', [LResponse.ToString])
        else
          edtResponse.Text := Format('客户端响应:%s', ['nil']);
      finally
        LResponse.Free;
      end;
    finally
      LMessage.Free;
    end;
  finally
    LClient.Free;
  end;
end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值