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

📄 buffer.pas

📁 操作数据库的例子
💻 PAS
📖 第 1 页 / 共 5 页
字号:

unit Buffer;

interface
uses
  SPPO10, SMGP13, cmpp20, SGIP12, Windows, Classes, SysUtils;

type
  TMtBuffer = packed record
    Mt: TSPPO_MT; //消息中心到网关的下行数据包
    preprced: byte; //是否已预处理
    PrePrcResult: byte; //预处理结果0,正常,1无效的逻辑业务代码
    OutMsgType: byte; //SMGP20消息类别
    OutServiceID: array[0..9] of char; //smgp20计费代码
    OutFeeType: array[0..1] of char; //smgp20费用类别
    OutFixedFee: array[0..5] of char; //smgp20固定费用
    OutFeeCode: array[0..5] of char; //smgp20费用
    RealFeeCode: Cardinal; //实际费用
    RecTime: TDateTime; //数据包接收时间
    Status: Cardinal; //网关的应答状态
    OutMtMsgid: array[0..9] of char; //外部MsgId
    Prced: byte; //是否已成功处理
    PrcTimes: byte; //向网关发送的次数
    LastPrcTime: TDateTime; //最后向网关发送的时间
    IsUsed: byte; //缓冲是否已用
  end;

  //SMGP MO 缓冲
  TMoBuffer = packed record
    mo: TSMGP13_DELIVER;
    MoInMsgId: TINMSGID;
    RecTime: TDateTime;
    Prced: byte;
    PrcTimes: byte;
    LastPrcTime: TDateTime;
    IsUsed: byte;
  end;
  //SMGP rpt
  TRptBuffer = packed record
    Rpt: TSMGP13_DELIVER;
    RecTime: TDateTime;
    MtLogicId: Cardinal;
    MtInMsgId: TINMSGID;
    MtSpAddr: TPHONENUM;
    MtUserAddr: TPHONENUM;
    Prced: byte;
    PrcTimes: byte;
    LastPrcTime: TDateTime;
    IsUsed: byte;
  end;
  //SMGP OutMonitor
  TOutMonitorBuffer = packed record
    pac: TSMGP13_PACKET;
    IsUsed: byte;
  end;

  //CMPP MO 缓冲
  TMocmppBuffer = packed record
    mo: TCMPP_DELIVER;
    MoInMsgId: TINMSGID;
    RecTime: TDateTime;
    Prced: byte;
    PrcTimes: byte;
    LastPrcTime: TDateTime;
    IsUsed: byte;
  end;
  //CMPP rpt
  TRptcmppBuffer = packed record
    Rpt: TCMPP_DELIVER;
    RecTime: TDateTime;
    MtLogicId: Cardinal;
    MtInMsgId: TINMSGID;
    MtSpAddr: TPHONENUM;
    MtUserAddr: TPHONENUM;
    Prced: byte;
    PrcTimes: byte;
    LastPrcTime: TDateTime;
    IsUsed: byte;
  end;
  //cmpp OutMonitor
  TOutMonitorCmppBuffer = packed record
    pac: TCMPP20_PACKET;
    IsUsed: byte;
  end;

  //SGIP mo 缓冲
  TMoSgipBuffer = packed record
    mo: TSGIP12_DELIVER;
    MoInMsgId: TINMSGID;
    RecTime: TDateTime;
    Prced: byte;
    PrcTimes: byte;
    LastPrcTime: TDateTime;
    IsUsed: byte;
  end;
  //SGIP rpt
  TRptSgipBuffer = packed record
    Rpt: TSGIP12_DELIVER;
    RecTime: TDateTime;
    MtLogicId: Cardinal;
    MtInMsgId: TINMSGID;
    MtSpAddr: TPHONENUM;
    MtUserAddr: TPHONENUM;
    Prced: byte;
    PrcTimes: byte;
    LastPrcTime: TDateTime;
    IsUsed: byte;
  end;
  //SGIP OutMonitor
  TOutMonitorSgipBuffer = packed record
    pac: TSGIP12_PACKET;
    IsUsed: byte;
  end;

  TInMonitorBuffer = packed record
    pac: TSPPO_PACKET;
    IsUsed: byte;
  end;

  //基本缓冲类
  TBaseBufferObj = class(TObject)
  private
    Critical: TRTLCriticalSection; //临界区
    WriteCursor: Cardinal; //写缓冲游标
    ReadCursor: Cardinal; //读缓冲游标
    HaveBuffer: boolean; //有可读缓冲
    procedure lock;
    procedure unlock;
  public
    constructor Create();
    destructor destroy; override;
  end;
  //基本MT缓冲类
  TBaseMtBufferObj = class(TBaseBufferObj)
  private
    Buffers: array of TMtBuffer;
    procedure LoadFromFile(FileName: string; BlockSize: integer);
    procedure SaveToFile(FileName: string; BlockSize: integer);
  public
    constructor Create();
    destructor destroy; override;
    function Count: integer;
    function BufferSize: integer;
    procedure Delete(i: integer);
    function Read(i: integer): TMtBuffer;
  end;

  //SMGP  小灵通 电信
  //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  //TBaseMoBufferObj
  TBaseMoBufferObj = class(TBaseBufferObj)
  private
    Buffers: array of TMoBuffer;
    procedure LoadFromFile(FileName: string; BlockSize: integer);
    procedure SaveToFile(FileName: string; BlockSize: integer);
  public
    constructor Create();
    destructor destroy; override;
    function Count: integer;
    function BufferSize: integer;
    procedure Delete(i: integer);
    function Read(i: integer): TMoBuffer;
  end;
  //TMoLogBufferObj
  TMoLogBufferObj = class(TBaseMoBufferObj)
  public
    constructor Create();
    destructor destroy; override;
    function Add(Buffer: TMoBuffer): boolean;
    function Get: integer;
    procedure BakBuffer;
  end;
  //smgp mo buffer
  TMoBufferObj = class(TBaseMoBufferObj)
    LogBuffers: TMoLogBufferObj;
  private
    Seqid: Cardinal;
    function GetSeqid: Cardinal;
    procedure GetMsgId(var InMsgId: array of char);
  public
    constructor Create();
    destructor destroy; override;
    function Get: integer;
    function Add(pac: TSMGP13_PACKET): boolean;
    procedure Update(i: integer);
    procedure UpdateResp(i: integer);
    procedure DelExpired; //处理过期
    procedure BakBuffer;
  end;
  //smgp的mt log
  TMtLogBufferObj = class(TBaseMtBufferObj)
  public
    constructor Create();
    destructor destroy; override;
    function Get: integer;
    function Add(Buffer: TMtBuffer): boolean;
    procedure BakBuffer;
  end;
  //MT的缓冲类 smgp
  TMtBufferObj = class(TBaseMtBufferObj)
    LogBuffers: TMtLogBufferObj;
  private
    HavePrePrcBuffer: boolean;
    PrePrcCursor: Cardinal;
    MoReadCursor: Cardinal; //用于MO引起MT的读游标
    MoHaveBuffer: boolean; //用于MO引起MT的状态字
  public
    constructor Create();
    destructor destroy; override;
    function Get: integer;
    function Add(pac: TSPPO_PACKET): boolean;
    procedure Update(i: integer);
    procedure UpdateResp(i: integer; MtOutMsgId: array of char; Status: Cardinal);
    procedure DelExpired; //处理过期
    function GetPrePrc: integer;
    procedure UpdatePrePrced(i: integer; ServiceID: integer);
    procedure UpdateFailPrePrced(i: integer; result: integer);
    procedure BakBuffer;
  end;
  //SmGp 监控
  TMonitorOutBufferObj = class(TBaseBufferObj)
    Buffers: array of TOutMonitorBuffer;
  public
    constructor Create();
    destructor destroy; override;
    function Add(pac: TSMGP13_PACKET): boolean;
    procedure Delete(i: integer);
  end;
  //smgp baserptbuffer
  TBaseRptBufferObj = class(TBaseBufferObj)
  private
    Buffers: array of TRptBuffer;
    procedure LoadFromFile(FileName: string; BlockSize: integer);
    procedure SaveToFile(FileName: string; BlockSize: integer);
  public
    constructor Create();
    destructor destroy; override;
    function Count: integer;
    function BufferSize: integer;
    procedure Delete(i: integer);
    function Read(i: integer): TRptBuffer;
  end;
  //smgp rptbuffer
  TRptBufferObj = class(TBaseRptBufferObj)
  public
    constructor Create();
    destructor destroy; override;
    function Add(Buffer: TRptBuffer): boolean;
    function Get: integer;
    procedure Update(i: integer);
    procedure UpdateResp(i: integer);
    procedure BakBuffer;
  end;
  //TRptLogBufferObj
  TRptLogBufferObj = class(TBaseRptBufferObj)
    SendBuffers: TRptBufferObj;
  public
    constructor Create();
    destructor destroy; override;
    function Add(pac: TSMGP13_PACKET): boolean;
    function Get: integer;
    procedure Update(i: integer);
    procedure UpdateMsgId(i: integer; MtInMsgId: string; MtLogicId: Cardinal; MtSpAddr, MtUserAddr: string);
    procedure BakBuffer;
    procedure DelExpired; //处理过期
  end;

  //CMPP  移动
  //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  //TBaseMocmppBufferObj
  TBaseMocmppBufferObj = class(TBaseBufferObj)
  private
    Buffers: array of TMocmppBuffer;
    procedure LoadFromFile(FileName: string; BlockSize: integer);
    procedure SaveToFile(FileName: string; BlockSize: integer);
  public
    constructor Create();
    destructor destroy; override;
    function Count: integer;
    function BufferSize: integer;
    procedure Delete(i: integer);
    function Read(i: integer): TMocmppBuffer;
  end;
  //TMtCmppLogBufferObj
  TMtCmppLogBufferObj = class(TBaseMtBufferObj)
  public
    constructor Create();
    destructor destroy; override;
    function Get: integer;
    function Add(Buffer: TMtBuffer): boolean;
    procedure BakBuffer;
  end;
  //TMoLogcmppBufferObj
  TMoLogcmppBufferObj = class(TBaseMocmppBufferObj)
  public
    constructor Create();
    destructor destroy; override;
    function Add(Buffer: TMocmppBuffer): boolean;
    function Get: integer;
    procedure BakBuffer;
  end;
  //cmpp mo buffer
  TMocmppBufferObj = class(TBaseMocmppBufferObj)
    LogBuffers: TMoLogcmppBufferObj;
  private
    Seqid: Cardinal;
    function GetSeqid: Cardinal;
    procedure GetMsgId(var InMsgId: array of char);
  public
    constructor Create();
    destructor destroy; override;
    function Get: integer;
    function Add(pac: TCMPP20_PACKET): boolean;
    procedure Update(i: integer);
    procedure UpdateResp(i: integer);
    procedure DelExpired; //处理过期
    procedure BakBuffer;
  end;
  //cMpp的mt缓冲类
  TMtcmppBufferObj = class(TBaseMtBufferObj)
    LogBuffers: TMtCmppLogBufferObj;
  private
    HavePrePrcBuffer: boolean;
    PrePrcCursor: Cardinal;
    MoReadCursor: Cardinal; //用于MO引起MT的读游标
    MoHaveBuffer: boolean; //用于MO引起MT的状态字
  public
    constructor Create();
    destructor destroy; override;
    function Get: integer;
    function Add(pac: TSPPO_PACKET): boolean;
    procedure Update(i: integer);
    //procedure UpdateResp(i: integer; MtOutMsgId: array of char; Status: Cardinal);
    procedure UpdateResp(i: integer; MtOutMsgId: Int64; Status: Cardinal);
    procedure DelExpired; //处理过期
    function GetPrePrc: integer;
    procedure UpdatePrePrced(i: integer; ServiceID: integer);
    procedure UpdateFailPrePrced(i: integer; result: integer);
    procedure BakBuffer;
  end;
  //cmpp 监控
  TMonitorOutCmppBufferObj = class(TBaseBufferObj)
    Buffers: array of TOutMonitorCmppBuffer;
  public
    constructor Create();
    destructor destroy; override;
    function Add(pac: TCMPP20_PACKET): boolean;
    procedure Delete(i: integer);
  end;
  //cmpp baserptbuffer
  TBaseRptcmppBufferObj = class(TBaseBufferObj)
  private
    Buffers: array of TRptcmppBuffer;
    procedure LoadFromFile(FileName: string; BlockSize: integer);
    procedure SaveToFile(FileName: string; BlockSize: integer);
  public
    constructor Create();
    destructor destroy; override;
    function Count: integer;
    function BufferSize: integer;
    procedure Delete(i: integer);
    function Read(i: integer): TRptcmppBuffer;
  end;
  //cmpp rptbuffer
  TRptcmppBufferObj = class(TBaseRptcmppBufferObj)
  public
    constructor Create();
    destructor destroy; override;
    function Add(Buffer: TRptcmppBuffer): boolean;
    function Get: integer;
    procedure Update(i: integer);
    procedure UpdateResp(i: integer);
    procedure BakBuffer;
  end;
  //TRptLogcmppBufferObj
  TRptLogcmppBufferObj = class(TBaseRptcmppBufferObj)
    SendcmppBuffers: TRptcmppBufferObj;
  public
    constructor Create();
    destructor destroy; override;
    function Add(pac: TCMPP20_PACKET): boolean;
    function Get: integer;
    procedure Update(i: integer);
    procedure UpdateMsgId(i: integer; MtInMsgId: string; MtLogicId: Cardinal; MtSpAddr, MtUserAddr: string);
    procedure BakBuffer;
    procedure DelExpired; //处理过期
  end;

  //SGIP  联通
  //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  //mo Sgip base buffer
  TBaseMoSgipBufferObj = class(TBaseBufferObj)
  private
    Buffers: array of TMoSgipBuffer;
    procedure LoadFromFile(FileName: string; BlockSize: integer);
    procedure SaveToFile(FileName: string; BlockSize: integer);
  public
    constructor Create();
    destructor destroy; override;
    function Count: integer;
    function BufferSize: integer;
    procedure Delete(i: integer);
    function Read(i: integer): TMoSgipBuffer;
  end;
  //logSgip
  TMoLogSgipBufferObj = class(TBaseMoSgipBufferObj)
  public
    constructor Create();
    destructor destroy; override;
    function Add(Buffer: TMoSgipBuffer): boolean;
    function Get: integer;
    procedure BakBuffer;
  end;
  //Sgip mo buffer
  TMoSgipBufferObj = class(TBaseMoSgipBufferObj)
    LogBuffers: TMoLogSgipBufferObj;
  private
    Seqid: Cardinal;
    function GetSeqid: Cardinal;
    procedure GetMsgId(var InMsgId: array of char);
  public
    constructor Create();
    destructor destroy; override;
    function Get: integer;
    function Add(pac: TSGIP12_PACKET): boolean;
    procedure Update(i: integer);
    procedure UpdateResp(i: integer);
    procedure DelExpired; //处理过期
    procedure BakBuffer;
  end;
  //Sgip的mt log
  TMtSgipLogBufferObj = class(TBaseMtBufferObj)
  public
    constructor Create();
    destructor destroy; override;
    function Get: integer;
    function Add(Buffer: TMtBuffer): boolean;
    procedure BakBuffer;
  end;
  //Sgip的mt缓冲类
  TMtSgipBufferObj = class(TBaseMtBufferObj)
    LogBuffers: TMtSgipLogBufferObj;
  private
    HavePrePrcBuffer: boolean;
    PrePrcCursor: Cardinal;
    MoReadCursor: Cardinal; //用于MO引起MT的读游标
    MoHaveBuffer: boolean; //用于MO引起MT的状态字
  public
    constructor Create();
    destructor destroy; override;
    function Get: integer;
    function Add(pac: TSPPO_PACKET): boolean;
    procedure Update(i: integer);
    //procedure UpdateResp(i: integer; MtOutMsgId: array of char; Status: Cardinal);
    procedure UpdateResp(i: integer; MtOutMsgId: Int64; Status: Cardinal);
    procedure DelExpired; //处理过期
    function GetPrePrc: integer;
    procedure UpdatePrePrced(i: integer; ServiceID: integer);
    procedure UpdateFailPrePrced(i: integer; result: integer);
    procedure BakBuffer;
  end;
  //Sgip 监控
  TMonitorOutSgipBufferObj = class(TBaseBufferObj)
    Buffers: array of TOutMonitorSgipBuffer;
  public
    constructor Create();
    destructor destroy; override;
    function Add(pac: TSGIP12_PACKET): boolean;
    procedure Delete(i: integer);
  end;
  //Sgip baserptbuffer
  TBaseRptSgipBufferObj = class(TBaseBufferObj)
  private
    Buffers: array of TRptSgipBuffer;
    procedure LoadFromFile(FileName: string; BlockSize: integer);
    procedure SaveToFile(FileName: string; BlockSize: integer);
  public
    constructor Create();
    destructor destroy; override;
    function Count: integer;
    function BufferSize: integer;
    procedure Delete(i: integer);
    function Read(i: integer): TRptSgipBuffer;
  end;
  //Sgip rptbuffer
  TRptSgipBufferObj = class(TBaseRptSgipBufferObj)
  public
    constructor Create();
    destructor destroy; override;
    function Add(Buffer: TRptSgipBuffer): boolean;
    function Get: integer;
    procedure Update(i: integer);
    procedure UpdateResp(i: integer);
    procedure BakBuffer;
  end;
  //Sgip
  TRptLogSgipBufferObj = class(TBaseRptSgipBufferObj)
    SendSgipBuffers: TRptSgipBufferObj;
  public
    constructor Create();
    destructor destroy; override;
    function Add(pac: TSGIP12_PACKET): boolean;
    function Get: integer;
    procedure Update(i: integer);
    procedure UpdateMsgId(i: integer; MtInMsgId: string; MtLogicId: Cardinal; MtSpAddr, MtUserAddr: string);
    procedure BakBuffer;
    procedure DelExpired; //处理过期
  end;

  //OUTHER
  //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  TMonitorInBufferObj = class(TBaseBufferObj)
    Buffers: array of TInMonitorBuffer;
  public
    constructor Create();
    destructor destroy; override;
    function Add(pac: TSPPO_PACKET): boolean;
    procedure Delete(i: integer);
  end;


implementation
uses
  Global, DateUtils;

//基本
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
{ TBaseBufferObj }

constructor TBaseBufferObj.Create;
begin
  inherited;
  InitializeCriticalSection(Critical);
  WriteCursor := 1;
  ReadCursor := 1;
  HaveBuffer := True;
end;

destructor TBaseBufferObj.destroy;
begin
  DeleteCriticalSection(Critical);
  inherited;
end;

procedure TBaseBufferObj.lock;
begin
  EnterCriticalSection(Critical);
end;

procedure TBaseBufferObj.unlock;
begin
  LeaveCriticalSection(Critical);
end;

{ TBaseMtBufferObj }
function TBaseMtBufferObj.BufferSize: integer;
begin
  result := high(Buffers);
end;

function TBaseMtBufferObj.Count: integer;
var

⌨️ 快捷键说明

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