cross socket接口封装

Posted hnxxcxg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

  

以上是关于cross socket接口封装的主要内容,如果未能解决你的问题,请参考以下文章

socket编程

java中封装,继承,多态,接口学习总结

socket数据的封装

Java 封装

Java 封装

Java 封装