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

📄 receivethreadunit.pas

📁 联通短信平台,1,3版稳定版400条/s
💻 PAS
字号:
unit ReceiveThreadUnit;

interface

uses
  Classes,SysUtils,SGIP12_Protocol,ADODB,DB,WinSock,DeliverUnit,ActiveX;

type
  //接收短信线程类
  DeliverThread = class(TThread)
  private
    { Private declarations }
    Deliver :TDeliver;
    ADOConnStr:String;
  protected
    procedure Execute; override;
    procedure ReceiveDeliver();
  public
    constructor Create( CreateSuspended: Boolean; ADeliver:TDeliver;AADOConnStr:String);
    destructor Destroy; override;
  end;


  //接收状态报告线程类
  ReportThread = class(TThread)
  private
    { Private declarations }
    Report :TReport;
    ADOConnStr:String;
  protected
    procedure Execute; override;
    procedure ReceiveReport();
    //procedure ReceiveReport
  public
    constructor Create( CreateSuspended: Boolean;AReport :TReport;AADOConnStr:String);
    destructor Destroy; override;
  end;

implementation

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure ReceiveThread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ DeliverThread }
constructor DeliverThread.Create( CreateSuspended: Boolean; ADeliver:TDeliver;AADOConnStr:String);
begin
  self.Deliver := ADeliver;
  self.ADOConnStr := AADOConnStr;
  inherited Create( CreateSuspended );
end;

destructor DeliverThread.Destroy;
begin
  inherited;
end;

procedure DeliverThread.ReceiveDeliver();
var
  StoredProc :TADOStoredProc;
  ShortMessage ,UserNumber: String;
begin
  UserNumber := String(Deliver.UserNumber);
  if Copy(UserNumber,1,2) = '86' then UserNumber := Copy(UserNumber,3,Length(UserNumber) - 2);

  if Deliver.MessageCoding in [0..4, 15..17, 210, 240, 242, 247] then  //ASCII OR GB15
  begin
    SetString(ShortMessage,Deliver.MessageContent,WinSock.htonl(Deliver.MessageLength));
  end;

  if Deliver.MessageCoding in [8..11, 23..25, 27] then   //UCS2
  begin
    ShortMessage := DeliverUnit.DeliverForm.UniCodeArrayToString(Deliver.MessageContent,WinSock.htonl(Deliver.MessageLength));
  end;

  try
    CoInitialize(nil);
    StoredProc := TADOStoredProc.Create(nil);
    StoredProc.ConnectionString := self.ADOConnStr;
    with StoredProc,StoredProc.Parameters do
    begin
    try
      ProcedureName := 'SGIP12_Deliver';
      CreateParameter('UserNumber',ftString,pdInput,20,UserNumber);
      CreateParameter('SPNumber',ftString,pdInput,20,String(Deliver.SPNumber));
      CreateParameter('MessageContent',ftString,pdInput,300,ShortMessage);
      CreateParameter('LinkID',ftString,pdInput,8,String(Deliver.Reserver));
      ExecProc;
    except
    end;
    end;
  finally
    FreeAndNil(StoredProc);
    FreeOnTerminate := True;
  end;
end;

procedure DeliverThread.Execute;
begin
  { Place thread code here }
  FreeOnTerminate := True;
  self.ReceiveDeliver;
end;

{ReportThread}
constructor ReportThread.Create( CreateSuspended: Boolean;AReport :TReport;AADOConnStr:String);
begin
  self.ADOConnStr := AADOConnStr;
  self.Report := AReport;
  inherited Create( CreateSuspended );
end;

destructor ReportThread.Destroy;
begin
  inherited;
end;

procedure ReportThread.Execute;
begin
  { Place thread code here }
  FreeOnTerminate := True;
  self.ReceiveReport;
end;

procedure ReportThread.ReceiveReport();
var
//  StoredProc :TADOStoredProc;
  msgid,UserNumber :String;
  upQueryData : TADOQuery;
begin
  UserNumber := String(Report.UserNumber);

  try
    CoInitialize(nil);

    upQueryData := TADOQuery.Create(nil);
    upQueryData.ConnectionString  := self.ADOConnStr; //
    msgid:= inttostr(Report.SequenceNumber1) + inttostr(Report.SequenceNumber2)+inttostr(Report.SequenceNumber3) ;
          upQueryData.Close ;
          upQueryData.SQL.Text :='Update sms_report set rawstate='+''''+'0'+''''+',state='+''''+'c'+''''+' where msgid= '+'''' +msgid+''''   ;
         //upQueryData.SQL.Text :='Insert into msgidtest (msgid ,usernumber)values('+'''' +msgid+''''+','+''''+UserNumber+''''+')';
          upQueryData.ExecSQL ;
          ///////////////////
       //   upQueryData.Close ;
       //   upQueryData.SQL.Text :='Insert into msgidtest (msgid ,usernumber,message)values('+'''' +msgid+''''+','+''''+UserNumber+''''+')';
       //   upQueryData.ExecSQL ;
    {StoredProc := TADOStoredProc.Create(nil);
    StoredProc.ConnectionString := self.ADOConnStr;
    with StoredProc,StoredProc.Parameters do
    begin
      ProcedureName := 'SGIP12_Report';
      msgid:=inttostr(Report.SequenceNumber1) + inttostr(Report.SequenceNumber2)+inttostr(Report.SequenceNumber3) ;
    //  self.WriteInfo(msgid)  ;
      CreateParameter('msgid',ftString,pdInput,30,msgid);
      CreateParameter('State',ftString,pdInput,0,(Report.State));
      CreateParameter('LinkID',ftString,pdInput,8,string(Report.Reserve));
      ExecProc;
    end;  }
  finally
    FreeAndNil(upQueryData);
 //   FreeAndNil(StoredProc);
    FreeOnTerminate := True;
  end;
end;

end.

⌨️ 快捷键说明

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