📄 receivethreadunit.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 + -