⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pkgunit.pas

📁 实例4学院信息管理系统 - RAR 档案文件
💻 PAS
字号:
unit PkgUnit;
(*
    通讯包模块
    01:包头
    02:数据段分隔符
    03:包尾
    限制通讯包长度为2048
    数据段格式:
    数据名+':'+数据
    例如:#01+
          'LCNO:LC9987401000001'+
          #02+
          'AMAT:128.45'+
          #02+
          'CYNO:USD'+
          #02+
          #03
    数据包初始化: InitPackage
    数据打包: AddPackage
    数据解包: GetPackage
*)

interface
uses
  Windows, Messages, Graphics, Controls, Forms, Dialogs,
  SysUtils, Classes;

const
  ChmyOK = 0;
  ChmyErr_spExec = 1;
  CRLF = #13#10;
  ACC_OK = 'ok';

  SPackageHead = #01;
  SPackageEnd = #03;
  SPackageData = #02;
  SPackageLength = 2048;

Type
  TSPkgData = array [1..SPackageLength] of char;

  TSPackage = class(TObject)
  private
    { Private declarations }
    function  GetItem( Hash : string ) : string;
    procedure SetItem( Hash : string; data:string  );
  public
    { Public declarations }
    buf:TSPkgData;

    constructor Create(dd:TSPkgData);overload;virtual;
    constructor Create;overload;virtual;
    property    Item[Hash : string] : string read GetItem write SetItem;
    procedure   GetPacket(var v:TSPkgData);
  end;


implementation

constructor TSPackage.Create(dd:TSPkgData);
begin
  Inherited Create;
  move(dd,buf,SPackageLength);
end;

constructor TSPackage.Create;
begin
  buf[1]:=SPackageHead;
  buf[2]:=SPackageEnd;
end;

function TSPackage.GetItem( Hash : string ) : string;
var i,j:integer;str:string;bb:boolean;
begin
  str:='';
  i:=1;
  j:=1;
  bb := False;
  while(TRUE) do
  begin
    if(i>=SPackageLength)or(buf[i]=SPackageEnd)then break;

    if buf[i] = Hash[j] then  Inc(j)
    else j:=1;

    inc(i);
    if(j>length(Hash))and(buf[i]=':')then
    begin
      bb := True;
      break;
    end;
  end;

  if(bb)then
  begin
    while(True) do
    begin
      inc(i);
      if(buf[i]=SPackageData)or(buf[i]=SPackageData)or(i>=SPackageLength)then
          break
      else
          str := str + buf[i];
    end;
  end;
  result := str;
end;

procedure  TSPackage.SetItem( Hash:string; data:string );
var i:integer;str:string;
begin
  i:=1;

  str := Hash + ':' + data + SPackageData + SPackageEnd;

  while(True)do
  begin
    if buf[i]=SPackageEnd then break;
    inc(i);
    if i>= SPackageLength then exit;
  end;

  if(i+Length(str)+2)>=SPackageLength then exit;

  move(str[1],buf[i],length(str));

end;

procedure   TSPackage.GetPacket(var v:TSPkgData);
begin
  move(buf,v,SPackageLength);
end;




end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -