zoukankan      html  css  js  c++  java
  • cross socket接口封装

    cross socket接口封装

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

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

    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;
    

      

    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;
    

      

    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;
    

      

    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;
    

      

    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:	est.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;
    

      

  • 相关阅读:
    Memcached存储溢出
    Memcached windows安装
    Memcached简介
    HTTP请求中怎样选择Get和Post方式
    【cogs 597】【dp】交错匹配
    <LeetCode OJ> 58. Length of Last Word
    codevs1051
    最重要的 Java EE 最佳实践
    android-xBuild apk差分与合成,zip差分与合成,lua打包,apk打包,png/jpg图片压缩
    [Phonegap+Sencha Touch] 移动开发26 Android下的sencha touch程序,转屏时,Ext.Viewport不能触发orientationchange事件的解决的方法
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/12297917.html
Copyright © 2011-2022 走看看