首页 > 其他分享 >Delphi XE DataSnap.DSServer[2] TDSServer[2] BroadcastMessage-广播消息

Delphi XE DataSnap.DSServer[2] TDSServer[2] BroadcastMessage-广播消息

时间:2022-11-04 11:59:17浏览次数:55  
标签:Count end BroadcastMessage Delphi TDSServer FCallbacks Result Msg

Delphi XE DataSnap.DSServer[2] TDSServer[2] BroadcastMessage-广播消息

向所有客户端回调发送消息。

function TDSServer.BroadcastMessage(const ChannelName: string;
                                    const Msg: TJSONValue;
                                    const ArgType: Integer): Boolean;
var
  I, Count: Integer;
  CurrentPassed: Boolean;
  TunnelItem: TDSCallbackTunnel;
begin
  TMonitor.Enter(FCallbacks);
  try
    Count := FCallbacks.Count;
    if Count > 0 then
    begin
      Result := True;
      for I := Count - 1 downto 0 do
      begin
        try
          TunnelItem := FCallbacks.Items[I];
          CurrentPassed := True;
          if TunnelItem.ListeningOn(ChannelName) then
            CurrentPassed := TunnelItem.BroadcastMessage(Msg.Clone as TJSONValue, ChannelName,
                                                         CALLBACK_TIMEOUT, ArgType);
        except
          CurrentPassed := False;
          FCallbacks.Delete(I);
        end;
        Result := CurrentPassed and Result;
      end;
    end
    else
      Result := false;
  finally
    // Caller must pass clone because callee will free
    Msg.Free;
    TMonitor.Exit(FCallbacks);
  end;
end;

function TDSServer.BroadcastMessage(const ChannelName, CallbackId: string;
                                    const Msg: TJSONValue;
                                    const ArgType: Integer): Boolean;
var
  I, Count: Integer;
  TunnelItem: TDSCallbackTunnel;
begin
  TMonitor.Enter(FCallbacks);
  try
    Count := FCallbacks.Count;
    if Count > 0 then
    begin
      Result := True;
      for I := Count - 1 downto 0 do
      begin
        TunnelItem := FCallbacks.Items[I];
        if TunnelItem.ListeningOn(ChannelName) then
          try
            Result := TunnelItem.BroadcastMessage(CallbackId, Msg.Clone as TJSONValue) and Result;
          except
            Result := False;
            FCallbacks.Delete(I);
          end;
      end;
    end
    else
      Result := false;
    // Caller must pass clone of Msg because callee will free
    Msg.Free;
  finally
    TMonitor.Exit(FCallbacks);
  end;
end;

BroadcastMessage方法向所有客户端回调发送消息。BroadcastMessage有两个重载。使用ChannelName、Msg和ArgType参数调用第一个重载。

第二个重载向具有给定注册回调标识符的所有客户端回调发送消息。为此,调用中需要一个额外的CallbackId参数。

  • ChannelName  //表示通道回调的名称。
  • CallbackId //表示回调标识符的字符串。
  • Msg //包含要广播的消息的TJSONValue。
  • ArgType  //表示JSON参数。

 

 

 

创建时间:2022.11.04  更新时间:

标签:Count,end,BroadcastMessage,Delphi,TDSServer,FCallbacks,Result,Msg
From: https://www.cnblogs.com/guorongtao/p/16857234.html

相关文章

  • Delphi XE DataSnap.DSServer[2] TDSServer[1] 介绍
    DelphiXEDataSnap.DSServer[2]TDSServer[1]介绍管理传输和服务器类的创建和生存期。此DataSnap服务器组件管理传输和服务器类的创建和生存期。//管理传输和服......
  • Delphi XE DataSnap.DSServer[1]介绍
    DelphiXEDataSnap.DSServer[1]介绍定义实现DataSnap回调隧道的类、要通过这些隧道发送的项、事件、隧道管理器、提供程序模块适配器、管理传输和服务器类的创建和生存......
  • Delphi获取Unix当前系统时间戳
    procedureTForm1.btn4Click(Sender:TObject); varStr:String; D:tDatetime; a:Double; functionDateTimeToUnixDate(constADate:TDateTime):Longint; c......
  • Delphi XE System.Generics.Collections[1] - 介绍
    DelphiXESystem.Generics.Collections[1]-介绍实现通用容器类以将数据项分组为数组、字典、列表、堆栈、队列等的单元。Package:rtl270.bpl ClassesTArrayCla......
  • delphi TscSplitView控件学习笔记(2)
    效果图:设计图:scSplitView设置:opened:false;openedwidth:150;(按你自己需求)compactwidth:35;(确保只能看到图标即可)设计技巧:compactwidth先设置成全尺......
  • delphi TscSplitView控件学习笔记
    一.先说效果吧,放置的位置不一样,显示出来的效果也不一样 然后效果是这样的:注意位置标记1按钮的位置.当DisplayMode:=scsvmOverlay时,会遮挡TscSplitView......
  • Delphi datasnap如何使用IPv6地址
    今天看到电信公司开始推广使用IPv6我也想着用datasnap中间件也使用IPv6,百度一下都是下面的说法: “有些人说DATASNAP不支持IPv6,只支持IPv4。这是不正确的。DATASNAP默......
  • Delphi 替换字符函数
    Delphi中的StringReplace函数是SysUtils单元中自带的函数:typeTReplaceFlags=setof(rfReplaceAll,rfIgnoreCase);functionStringReplace(constS,OldPattern,......
  • delphi TMS FlexCel 导出页面设置
    TMSFlexCel导出页面设置属性和方法TFlexCelHtmlExport.HidePrintObjectspropertyHidePrintObjects:SetofTHidePrintObjects选择哪些类型的对象不应该导出。导......
  • delphi 避免两个联动的COMBOBOX进入死循环
      当物料类型为刀具仓时,单位自动修改为粒 当物料类型为原料仓时,单位自动修改为公斤反之亦然.这是两个相互联动的控件,如果直接写的话,会直接死循环.如何......