cross socket接口封装

cross socket接口封装

cross socket是DELPHI跨操作系统的SOCKET通讯库,支持WINDOWS,LINUX,MACOS操作系统。

经过封装的接口,调用异常简单。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button2Click(Sender: TObject);
//REST查询
begin
  var url, sql1, sql2: string;
  sql1 := TNetEncoding.URL.Encode('select * from tgoods');
  sql2 := TNetEncoding.URL.Encode('select * from tunit');
  url := FUrl + 'rest?accountno=1&tablenum=2&plugid=9999&funcid=' + IntToStr(cmd_query) + '&sql1=' + sql1 + '&sql2=' + sql2;
  var s: string := IdHTTP1.Get(url);
  Memo1.Lines.Add(s);
  var js: TynJsonCross := TynJsonCross.Create;
  js.Text := s;
  js.ReadCDS(0, ClientDataSet1);
  js.ReadCDS(1, ClientDataSet2);
  js.Free;
end;

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button3Click(Sender: TObject);
//bin调用存储过程
begin
  var pack: TMsgPack := TMsgPack.Create;
  pack.Force('cmd').AsInteger := cmd_plugbin;
  pack.Force('plugid').AsInteger := 9999;
  pack.Force('funcid').AsInteger := cmd_sp;
  pack.Force('spname').AsString := 'sp_9';
  pack.Force('accountno').AsString := '1';
  pack.Force('params').AsString := '@goodsid=100036';   //多个参数以分号作分隔符
  execRemoteFunc(pack, FUrl + 'bin');
  if pack.Force('return').AsBoolean then
    ClientDataSet1.Data := pack.Force('dataset1').AsVariant;
  pack.Free;
end;

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.Button5Click(Sender: TObject);
//REST TOKEN
begin
  const secret: string = 'ynMiddleWare(cross)';    //公钥
  var LToken: TJWT := TJWT.Create;
  LToken.Claims.Subject := secret;      //主题
  LToken.Claims.IssuedAt := Now;        //签发时间
  LToken.Claims.Expiration := Now + 1;  //超时
  LToken.Claims.Issuer := secret;       //签发人
  var LAlg: TJOSEAlgorithmId := TJOSEAlgorithmId.HS256;    //hs256
  var s: string := TJOSE.SerializeCompact(secret, LAlg, LToken);
  var url: string := FUrl + 'rest?accountno=1&tablenum=1&&token=' + s + '&plugid=9999&funcid=' + IntToStr(cmd_query_token) + '&sql1=' + TNetEncoding.URL.Encode('select * from tunit');
  s := IdHTTP1.Get(url);
  Memo1.Lines.Add(s);
  LToken.Free;
  var js: TynJsonCross := TynJsonCross.Create;
  js.Text := s;
  js.ReadCDS(0, ClientDataSet1);
  js.Free;
end;

  

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
procedure TForm1.Button6Click(Sender: TObject);
//bin雪花ID
begin
  var pack: TMsgPack := TMsgPack.Create;
  pack.Force('cmd').AsInteger := cmd_plugbin;
  pack.Force('accountno').AsString := '1';
  pack.Force('orgid').AsInteger := 1;
  pack.Force('machineid').AsInteger := 1;
  pack.Force('plugid').AsInteger := 1000;
  pack.Force('funcid').AsInteger := cmd_snowid;
  execRemoteFunc(pack, FUrl + 'bin');
  Memo1.Lines.Add(IntToStr(pack.Force('snowid').AsInteger));
  pack.Free;
end;
 
procedure TForm1.Button7Click(Sender: TObject);
//rest雪花ID
begin
  var url: string;
  url := FUrl + 'rest?orgid=6&machineid=9&plugid=1000&funcid=' + IntToStr(cmd_snowid);
  var s: string := IdHTTP1.Get(url);
  Memo1.Lines.Add(s);
end;
 
procedure TForm1.Button8Click(Sender: TObject);
//BIN提交
begin
  if ClientDataSet1.State in [dsInsert, dsEdit] then
    ClientDataSet1.Post;
  if ClientDataSet2.State in [dsInsert, dsEdit] then
    ClientDataSet2.Post;
  if ClientDataSet1.ChangeCount = 0 then
    exit;
  if ClientDataSet2.ChangeCount = 0 then
    exit;
  var pack: TMsgPack := TMsgPack.Create;
  pack.Force('cmd').AsInteger := cmd_plugbin;
  pack.Force('plugid').AsInteger := 9999;
  pack.Force('funcid').AsInteger := cmd_save;
  pack.Force('tablenum').AsInteger := 2;
  pack.Force('tablename1').asstring := 'tgoods';
  pack.Force('tablename2').asstring := 'tunit';
  pack.Force('delta1').AsVariant := ClientDataSet1.Delta;
  pack.Force('delta2').AsVariant := ClientDataSet2.Delta;
  pack.Force('accountno').AsString := '1';
  execRemoteFunc(pack, FUrl + 'bin');
  if pack.Force('return').AsBoolean then
  begin
    ClientDataSet1.MergeChangeLog;
    ClientDataSet2.MergeChangeLog;
  end;
end;
 
procedure TForm1.Button9Click(Sender: TObject);
//rest上传文件
begin
  if OpenDialog1.Execute then
  begin
    var ms: TIdMultiPartFormDataStream := TIdMultiPartFormDataStream.Create;
    ms.AddFormField('test', TNetEncoding.URL.Encode('中国'));
    ms.AddFile('file1', OpenDialog1.FileName);
    IdHTTP1.Post(FUrl + 'rest?plugid=8888&funcid=6&filenum=1&filename1=test.txt', ms);
    ms.Free;
  end;
end;
 
procedure TForm1.execRemoteFunc(pack: TMsgPack; url: string);
//bin执行远程方法
begin
  var send: TMemoryStream := TMemoryStream.Create;
  var recv: TMemoryStream := TMemoryStream.Create;
  pack.EncodeToStream(send);    //msgpack-->stream
  send.Position := 0;
  IdHTTP1.Post(url, send, recv);  //send
  send.Free;
  pack.Clear;
  recv.Position := 0;
  var ms2: TStream := TMemoryStream.Create;
  TZip.UnZipStream(recv, ms2);        //解压
  ms2.Position := 0;
  pack.DecodeFromStream(ms2);          //stream-->msgpack
  recv.Free;
  ms2.Free;
end;

  

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
procedure TForm1.Button10Click(Sender: TObject);
//rest下载文件
//{"files":[
//  {"fielname1":"文件名1","file1":"BASE64文件流1"},
//  {"fielname2":"文件名1","file2":"BASE64文件流2"}
//  ]
//}
begin
  var s: string := IdHTTP1.get(FUrl + 'rest?plugid=8888&funcid=5&filenum=1&filename1=1.exe');
  var jo: JsonDataObjects.TJsonObject := JsonDataObjects.TJsonObject.Parse(s) as JsonDataObjects.TJsonObject;
  var i: Integer;
  var filename, file2: string;
  var dd: TIdDecoderMIME := TIdDecoderMIME.Create(nil); //base64解码
  var ms: TMemoryStream := TMemoryStream.Create;
  try
    for i := 0 to jo.A['files'].Count - 1 do
    begin
      filename := jo.A['files'].O[i].s['filename' + (i + 1).ToString];  //文件名
      file2 := jo.A['files'].O[i].s['file' + (i + 1).ToString];  //文件
      dd.DecodeStream(file2, ms);   //base64解码
      ms.SaveToFile(filename);   //保存下载的文件
      ms.Clear;
    end;
  finally
    dd.Free;
    ms.Free;
  end;
end;
 
procedure TForm1.Button11Click(Sender: TObject);
//rest保存
begin
  var delta: TynJsonDelta := TynJsonDelta.Create('tunit');
  var delta2: TynJsonDelta := TynJsonDelta.Create('tgoods');
  var deltas: TynJsonDeltas := TynJsonDeltas.Create;
  try
    delta.Insert('{"unitid":"13","unitname":"人"}');
    delta.Delete('{"unitid":"66","unitname":"国"}');
    delta.Update('{"unitid":"11","unitname":"中"}', '{"unitid":"11","unitname":"个"}');
 
    delta2.Insert('{"goodsid":"123456","goodsname":"咏南中间件"}');
 
    deltas.Add(delta.Text);
    deltas.Add(delta2.Text);
    Memo1.Text := deltas.Text;
  finally
    delta.Free;
    delta2.Free;
    deltas.Free;
  end;
end;
 
procedure TForm1.Button12Click(Sender: TObject);
//bin上传文件
begin
  if OpenDialog1.Execute then
  begin
    var pack: TMsgPack := TMsgPack.Create;           //准备参数
    pack.Force('cmd').AsInteger := cmd_plugbin;
    pack.Force('filenum').AsInteger := 1;
    pack.Force('plugid').AsInteger := 8888;
    pack.Force('funcid').AsInteger := cmd_up;
    pack.Force('filename1').AsString := 'test.txt';
    pack.Force('file1').LoadBinaryFromFile(OpenDialog1.FileName);
    execRemoteFunc(pack, FUrl + 'bin');          //执行远程方法
    if pack.Force('return').AsBoolean then
    begin
      Memo1.Lines.Add('上传成功');
    end;
    pack.Free;
  end;
end;
 
procedure TForm1.Button13Click(Sender: TObject);
//bin下载文件
begin
  var pack: TMsgPack := TMsgPack.Create;           //准备参数
  pack.Force('cmd').AsInteger := cmd_plugbin;
  pack.Force('filenum').AsInteger := 1;
  pack.Force('plugid').AsInteger := 8888;
  pack.Force('funcid').AsInteger := cmd_down;
  pack.Force('filename1').AsString := 'test.txt';
  execRemoteFunc(pack, FUrl + 'bin');          //执行远程方法
  if pack.Force('return').AsBoolean then
  begin
    pack.Force('file1').SaveBinaryToFile('d:\test.txt');
    Memo1.Lines.Add('下载成功');
  end;
  pack.Free;
end;
 
procedure TForm1.Button14Click(Sender: TObject);
//rest存储过程
begin
  var url, spname, params: string;
  url := FUrl + 'rest?accountno=1&spname=' + spname + '&params=' + params + '&plugid=9999&funcid=' + IntToStr(cmd_sp);
  var s: string := IdHTTP1.Get(url);
  Memo1.Lines.Add(s);
  var js: TynJsonCross := TynJsonCross.Create;
  js.Text := s;
  js.ReadCDS(0, ClientDataSet1);
  js.Free;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
//bin查询
begin
  var pack: TMsgPack := TMsgPack.Create;           //准备参数
  pack.Force('cmd').AsInteger := cmd_plugbin;
  pack.Force('plugid').AsInteger := 9999;
  pack.Force('funcid').AsInteger := cmd_query;
  pack.Force('tablenum').AsInteger := 2;
  pack.Force('sql1').AsString := 'select * from tgoods';
  pack.Force('sql2').AsString := 'select * from tunit';
  pack.Force('accountno').AsString := '1';
  execRemoteFunc(pack, FUrl + 'bin');      //执行远程方法
  if pack.Force('return').AsBoolean then
  begin
    ClientDataSet1.Data := pack.Force('dataset1').AsVariant;
    ClientDataSet2.Data := pack.Force('dataset2').AsVariant;
  end;
  pack.Free;
end;

  

posted @   delphi中间件  阅读(2000)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2012-02-12 XE2 LSUPER LITE安装提示item not found
2012-02-12 sql工厂类
2012-02-12 远程方法的定义和调用
2012-02-12 xe 最大连接数限制、记录客户连接、心跳
点击右上角即可分享
微信分享提示