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 + '¶ms=' + 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; |
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/12297917.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 最大连接数限制、记录客户连接、心跳