当前位置:首页 > Xe2DataSnap回调基本方法总结
服务端:
1. ServerContainer中两个元件,TDSServer以及TDSTCPServerTransport 2. 定义通道。如:
Const
DEMOChannel = ‘DemoChannel’; 3. 获取通道中所有回调ID方法:
ServerContainer1.DSServer1.GetAllChannelCallbackId(DEMOChannel); 4. 服务器回叫所有注册的用户方法(与通道、回调ID、传送的信息有关)如:
Var
vMessage :TJSONString; Begin
vMessage := TJSONString.Create(mmMessage.Lines.Text);
ServerContainer1.DSServer1.BroadcastMessage(DEMOChannel, vMessage); End; 原形是:
functionBroadcastMessage(constChannelName:
String;
constMsg:
TJSONValue;
constArgType: Integer = TDBXCallback.ArgJson): boolean; overload;
functionBroadcastMessage(constChannelName: String; constCallbackId: String; constMsg: TJSONValue; constArgType: Integer = TDBXCallback.ArgJson): boolean; overload;
实际服务器回叫用户是执行用户注册类(如:TDemoCallback)对应的虛拟方法Execute,传送给用户端的信息则由参数Msg封裝。
客户端:
1. 两个主要组件:TSQLConnection,TDSClientCallbackChannelManager。分别用于连接服
务器和客户端向服务器注册;TDSClientCallbackChannelManager要指明通道名(ChannelName)、通信类型(CommunicationProtocol=TCP/IP)、服务器地址(DSHostname)及端口(DSPort)。
2. 定义从TDBXCallback衍生类如下:
type
TDemoCallback = class(TDBXCallback) public
function Execute(constArg: TJSONValue): TJSONValue; override; end;
3. 复载虚拟方法Execute如下:
//////////////////////////////////////////////////////////////////////////// ///当DataSnap服务器回叫用户端时就会执行虚拟方法Execute;
///服务器可以把务器端传送到用户端的信息封装在Execute的参数Arg中 ///用TThread类別的方法Synchronize来更新用户端的使用者介面。 ///////////////////////////////////////////////////////////////////////////////// functionTDemoCallback.Execute(constArg: TJSONValue): TJSONValue; var
sDemoMessage : String; begin
Result :=TJSONTrue.Create; if (Arg is TJSONString) then begin
sDemoMessage := TJSONString(Arg).Value; TThread.Synchronize(nil, procedure begin
mm.Lines.Text:= sDemoMessage; end); end; end; 4. 连接DataSnap服务器,建立一个回调识別ID,如下:
procedureTFormMainClient.SetupTask; begin
if not SQLConnection1.Connected then begin
SQLConnection1.Connected := True; end;
callbackId := DateTimeToStr(Now); //根据目前的时间建立一个独特的识別ID Send; 5. 向DataSnap服务器注册这个回叫用户端,如下:
procedureTFormMainClient.BtnStartClick(Sender: TObject); begin
SetupTask; //(连接服务器) MM:= mmDemoMessage; //(回调信息显示的地方)
DSClientCallbackChannelManager1.RegisterCallback(callbackId, TDemoCallback.Create); //注册用户端通过DSClientCallbackChannelManager组件 end;
注意:回叫用户端向服务器注册的信息有:回叫通道、回叫ID、回叫执行方法Execute 其中回叫通道由TDSClientCallbackChannelManager组件指定。
6. 停止用户端回叫如下:
procedureTFormMainClient.BtnStopClick(Sender: TObject); begin
DSClientCallbackChannelManager1.UnregisterCallback(callbackId); end;
停止用户端回叫的信息有:回叫通道、回叫ID
当然,客户端可以定义多个TDBXCallback衍生类,每个都有自己的虚拟方法Execute,回叫用户端向服务器注册时,可以选择不同的回叫执行方法Execute了。
共分享92篇相关文档