Datasnapのコールバックブロードキャスト
7857 ワード
感覚的なdatasnap千孔百瘡は、xe 10まで何千人ものユーザーに衝撃を与える能力を備えている.安心してプロジェクトの実戦に使うべきだ.補習研究10.1 datasnap開発マニュアル.
使用する方法:
(1)TDBXCallbackメカニズム; (2)TDServer.BroadcastMessageメソッド (3)TDSClientCallbackChanneManager1.RegisterCallbackメソッド
一、コールバック方式1、サーバ側コールバック全て(同一チャネル)のクライアント2、クライアントコールバック(同一チャネル)の他のクライアント3、クライアントは複数のチャネルを登録することができる
server:は、チャネルを定義する.通路道路を決めて、この通路を走っているcarを検索します.各顧客ID を得る.
2.サーバからクライアントへのコールバック:
3.クライアント登録チャネルとコールバックチャネルの検索によりチャネル内のクライアントIDが得られる
Client:
1.クライアント登録クライアントは、TDSClientCallbackChannelManager 1によってコールバックチャネルを登録する.RegisterCallbackメソッド実装;実行文は、TDSClientCallbackChanneManager 1.RegisterCallback(Combobox1.Text, TDemoCallback.Create);次に、クライアントがサーバ側にコールバックチャネルを登録する場合、上記のコードには、(1)コールバックチャネルID、TDSClientCallbackChanneManagerの4つの要素が含まれている.ChannelName属性値;関連文字は、サーバに登録されているコールバックチャネル文字と一致する必要があります.(2)クライアントID,TDSClientCallbackChanneManager.ManagerID属性値;各クライアントは、一意の識別コードを明確にする必要があります.(3)TDSClientCallbackChanneManager 1.RegisterCallbackメソッドの1番目のパラメータ;(4)TDSClientCallbackChanneManager 1.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,被呼クライアントからの返信情報
使用する方法:
(1)TDBXCallbackメカニズム; (2)TDServer.BroadcastMessageメソッド (3)TDSClientCallbackChanneManager1.RegisterCallbackメソッド
一、コールバック方式1、サーバ側コールバック全て(同一チャネル)のクライアント2、クライアントコールバック(同一チャネル)の他のクライアント3、クライアントは複数のチャネルを登録することができる
server:
const DEMOChannel='DemoChannel';
2.サーバからクライアントへのコールバック:
procedure TSMainFrm.mmMessageChange(Sender: TObject);
var vMessage:TJSONString;
begin
vMessage := TJSONString.Create(mmMessage.Lines.Text);
ServerContainer1.DSServer1.BroadcastMessage(DEMOChannel, vMessage);
end;
3.クライアント登録チャネルとコールバックチャネルの検索によりチャネル内のクライアントIDが得られる
procedure TForm1.btnListAllClientIdsClick(Sender: TObject);
var
aIdList : TList<String>;
sId : String;
begin
aIdList := ServerContainer5.DSServer1.GetAllChannelClientId(DEMOChannel);{ all ID}
try
for sId in aIdList do
lbAllClientIds.Items.Add(sId);
finally
aIdList.Free;
end;
end;
procedure TForm1.btnListAllCallbackIdsClick(Sender: TObject);
var
aIdList : TList<String>;
sId : String;
begin
aIdList := ServerContainer5.DSServer1.GetAllChannelCallbackId(DEMOChannel);{ all ID
try
for sId in aIdList do
lbAllCallbackIds.Items.Add(sId);
finally
aIdList.Free;
end;
end;
Client:
1.クライアント登録クライアントは、TDSClientCallbackChannelManager 1によってコールバックチャネルを登録する.RegisterCallbackメソッド実装;実行文は、TDSClientCallbackChanneManager 1.RegisterCallback(Combobox1.Text, TDemoCallback.Create);次に、クライアントがサーバ側にコールバックチャネルを登録する場合、上記のコードには、(1)コールバックチャネルID、TDSClientCallbackChanneManagerの4つの要素が含まれている.ChannelName属性値;関連文字は、サーバに登録されているコールバックチャネル文字と一致する必要があります.(2)クライアントID,TDSClientCallbackChanneManager.ManagerID属性値;各クライアントは、一意の識別コードを明確にする必要があります.(3)TDSClientCallbackChanneManager 1.RegisterCallbackメソッドの1番目のパラメータ;(4)TDSClientCallbackChanneManager 1.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;