datasnap+msgpack

datasnap+msgpack

datasnap借助rtti,可以使用任何类型的自定义对象作为远程方法的参数和返回类型,这真是非常恐怖的存在。任何其他3方中间件是无论如何都做不到这一点的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
unit ServerMethodsUnit1;
 
interface
 
uses  MsgPack,
System.SysUtils, System.Classes, Datasnap.DSServer, Datasnap.DSAuth;
 
type
{$METHODINFO ON}
  TServerMethods1 = class(TComponent)
  private
    { Private declarations }
  public
    { Public declarations }
    function test(params: TMsgPack): TMsgPack;
  end;
{$METHODINFO OFF}
 
implementation
 
uses System.StrUtils;
 
 
{ TServerMethods1 }
 
function TServerMethods1.test(params: TMsgPack): TMsgPack;
begin
  var f1: string := params.Force('f1').AsString;
  var f2: string := params.Force('f2').AsString;
  FreeAndNil(params);
  Result := TMsgPack.Create;
  Result.Force('result').AsBoolean := True;
  Result.Force('f1').AsString := f1;
  Result.Force('f2').AsString := f2;
end;

  

 

1
2
3
4
5
6
7
8
9
10
type
  TServerMethods1Client = class(TDSAdminClient)
  private
    FtestCommand: TDBXCommand;
  public
    constructor Create(ADBXConnection: TDBXConnection); overload;
    constructor Create(ADBXConnection: TDBXConnection; AInstanceOwner: Boolean); overload;
    destructor Destroy; override;
    function test(params: TMsgPack): TMsgPack;
  end;

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm2.Button1Click(Sender: TObject);
begin
  var send: TMsgPack := TMsgPack.Create;
  send.Force('f1').AsString := '咏南';
  send.Force('f2').AsString := '中间件';
  var m: TServerMethods1Client := TServerMethods1Client.Create(SQLConnection1.DBXConnection);
  var recv: TMsgPack := m.test(send);
  if recv.Force('result').AsBoolean then
  begin
    Memo1.Lines.Add(recv.Force('f1').AsString);
    Memo1.Lines.Add(recv.Force('f2').AsString);
  end;
  m.Free;
end;

  

posted @   delphi中间件  阅读(516)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示