孤独的灵魂漂浮在黑暗上 發表於 2020-2-12 09:56:00

cross socket接口封装

<p>cross socket接口封装</p>
<p>cross socket是DELPHI跨操作系统的SOCKET通讯库,支持WINDOWS,LINUX,MACOS操作系统。</p>
<p>经过封装的接口,调用异常简单。</p>
<p><img src="https://img2018.cnblogs.com/common/368779/202002/368779-20200212095254056-726066780.png"></p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">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&amp;tablenum=2&amp;plugid=9999&amp;funcid=' + IntToStr(cmd_query) + '&amp;sql1=' + sql1 + '&amp;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;
</pre>
</div>
<p>  </p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">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;
</pre>
</div>
<p>  </p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">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&amp;tablenum=1&amp;&amp;token=' + s + '&amp;plugid=9999&amp;funcid=' + IntToStr(cmd_query_token) + '&amp;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;
</pre>
</div>
<p>  </p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">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&amp;machineid=9&amp;plugid=1000&amp;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 then
    ClientDataSet1.Post;
if ClientDataSet2.State in 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&amp;funcid=6&amp;filenum=1&amp;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--&gt;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--&gt;msgpack
recv.Free;
ms2.Free;
end;
</pre>
</div>
<p>  </p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">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&amp;funcid=5&amp;filenum=1&amp;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.s['filename' + (i + 1).ToString];//文件名
      file2 := jo.A['files'].O.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&amp;spname=' + spname + '&amp;params=' + params + '&amp;plugid=9999&amp;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;
</pre>
</div>
<p>  </p>

</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/12297917.html</p><br><br>
来源:https://www.cnblogs.com/hnxxcxg/p/12297917.html
頁: [1]
查看完整版本: cross socket接口封装