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